将一个小于256的十进制正整数转换成8位二进制形式并输出(不用循环语序做)。。最好还能解释下

2025-03-23 20:34:34
推荐回答(1个)
回答1:

#include
int main(void){
int data = 10; // 00001010 
printf("%d", (data>>7) & 1);
printf("%d", (data>>6) & 1);
printf("%d", (data>>5) & 1);
printf("%d", (data>>4) & 1);
printf("%d", (data>>3) & 1);
printf("%d", (data>>2) & 1);
printf("%d", (data>>1) & 1);
printf("%d", (data>>0) & 1);
return 0;
}

运行结果00001010

以上你应该会不明白 首先你要理解data此时是10 这里的10 在计算机的内是二进制的存储的

也就是00001010

那么是怎么做到的呢  首先介绍&是按位于运算

  1. 第一个printf里面的data>>7是什么意思 就是00001010 向右移动7位高位补0

  2. 得00000000   此时(data>>7) & 1 等价于00000000   & 00000001此时在于

    00000000   

    00000001

    ——————

    00000000这里是结果 由于输出的是%d格式所以就输出了0

  3. 依次类推

主要考察你的对内存的理解了 位运算 进制 和运算符


比较有意思的每次都是和1做&于运算 你想啊data每次位移之后他的最低位就是我们当前要输出的二进制表示的位,用1(也就是二进制的00000001)来和当前的data来于的话就是每次于的都是最低位了,这个最低位和1来于自然data最低位是0就输出0是1就输出1了这是个技巧了。利用了&运算符的特性。