题目想输入一个数,将他转成二进制后,1每次取它后7位,2在最后一组后七位前面加0,其余七位前面加1,组成8位,3并将每一个8位二进制转化成十六进制输出。 这个题巧妙用到了位运算: 1:用到了&,int byte=n&0b01111111:后面的是二进制表达,&的用法是如果两边全是1,则为1,否则为0,并且&可以直接把两边都转化为二进制计算。(deepseek的方式是n&0x7F)这样就可以把这七位数取出来了,由于前面是int,所以byte的值是十进制。 2:其余七位加1,用到的是result[i]|=0b10000000:|的用法是有1则为1,全0才为0.这样就可以在不影响后七位的情况下直接在前面加上1;并以十进制的形式储存在result里面。而最后一组加不加0不影响后面的计算。 3:语法cout<<uppercase<<hex<<setw(2)<<setfill('0')<<result[i]; uppercase:把字母都转化成大写; hex:以十六进制形式输出; setw:保留两位; setfill如果不够两位,在前面添上0; 另:1.for(int i=0;i<result.size();i++) 要灵活使用result.size(); 2.result.push_back(byte):直接将byte加到数组后面。