[英]Decimal to Binary conversion method
我遇到了将十进制数字转换为二进制的这种方法:
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”部分。 有人可以详细说明吗? 先感谢您。
发生的事情是所谓的面具。 基本上发生了什么,您有一个16位无符号整数。 可以说我们有以下内容:
uint x = 43981
相当于十六进制的0xABCD
并以二进制1010101111001101
因此,为了将其转换为数组,该算法正在做的事情是说:
将位向右移动一个位置。
1010101111001101 >> 1变为0101010111100110
将所有数字移到右侧,将0放在左侧。
然后,为了获得最低有效位,请执行以下操作:
0101010111100110
&
0000000000000001
=
0000000000000000
=
0
另一个例子是
0101010111100111
&
0000000000000001
=
0000000000000001
=
1
基本上,仅带1的&将使其他所有比特都变为0,然后,带有1的比特将成为原始编号中对应位置的任何比特的值。
这将继续发生,并且原始数字将继续右移,直到所有数字都循环遍历,从而创建0和1的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.