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

2020-06-26 科技 120阅读
#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了这是个技巧了。利用了&运算符的特性。

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com