#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
那么是怎么做到的呢 首先介绍&是按位于运算
第一个printf里面的data>>7是什么意思 就是00001010 向右移动7位高位补0
得00000000 此时(data>>7) & 1 等价于00000000 & 00000001此时在于
00000000
00000001
——————
00000000这里是结果 由于输出的是%d格式所以就输出了0
依次类推
主要考察你的对内存的理解了 位运算 进制 和运算符
比较有意思的每次都是和1做&于运算 你想啊data每次位移之后他的最低位就是我们当前要输出的二进制表示的位,用1(也就是二进制的00000001)来和当前的data来于的话就是每次于的都是最低位了,这个最低位和1来于自然data最低位是0就输出0是1就输出1了这是个技巧了。利用了&运算符的特性。