我遇到了这种将十进制数转换为二进制数的方法:
int main(void){
int i = 0;
unsigned int u_i = 0;
int j = 0;
int b[16] = {0}; //Assuming your integer size is 16bit
printf("input number");
scanf("%d",&i);
u_i = (unsigned int)i;
for(j=15;j>=0;j--) {
b[j] = u_i & 0x1;
u_i = u_i >> 1;
}
for (j=0;j<=15;j++)
printf("%d", b[j]);
printf("\n");
return 0;
}
我无法理解负责转换的“0x1”部分。任何人都可以详细说明吗?提前谢谢。
答案 0 :(得分:1)
正在发生的是一种叫做面具的东西。基本上发生了什么是你有一个16位的无符号整数。假设我们有以下内容:
uint x = 43981
这相当于十六进制到0xABCD
以二进制1010101111001101
因此,为了将其转换为数组,算法正在做的是:
将位移到右侧的一个位置。
1010101111001101&gt;&gt; 1变为0101010111100110
这是向右移动的所有数字,左边是0。
然后,为了得到最低有效位,完成以下操作:
0101010111100110
&
0000000000000001
=
0000000000000000
=
0
另一个例子是
0101010111100111
&
0000000000000001
=
0000000000000001
=
1
基本上&amp;只用1将使所有其他位0无论如何,然后带有1的一位将成为原始数字中相应位中的任何位的值。
这将继续发生,原始数字将继续正确移位,直到所有数字都循环完成,创建0和1的数组。