//首先给你讲一下这道题的思路
思路:int类型在内存中是32位,比如说1在内存中就是
0000 0000 0000 0000 0000 0000 0000 0001
>>位移,将二进制数系向右移,比如说我把6向右移动1
0000 0000 0000 0000 0000 0000 0000 0120 (6的二进制)
0000 0000 0000 0000 0000 0000 0000 0012 右移1后
0000 0000 0000 0000 0000 0000 0000 0012 &1后会得到最低位2
所以这道题的思路就是
先将一个数位移,然后将位移动后的数&1
1111 1111 1111 1111 1111 1111 1111 1111 这个数先右移31位得到
0000 0000 0000 0000 0000 0000 0000 0001 右边的1全部被移掉
再&1就得到了最低位的1 ,紧接着再移30位后&1,29位...以此类推
- void putBinary(int n)
- {
- int bits = sizeof(n) * 8;//这里应该是int bits=sizeof(n)*8-1因为你最多移动32-1位,不然就移光了
- while (bits-->0) {//这里的bits--就是循环减少右移的位数
- printf("%d", n>>bits&1);//右移30 29 28....
- if (bits%4==0) printf(" ");这里是为了好看,每四个位之间加个空格
- }
复制代码
|