十进制到二进制转换方法

时间:2018-03-24 16:38:57

标签: c

我遇到了这种将十进制数转换为二进制数的方法:

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”部分。任何人都可以详细说明吗?提前谢谢。

1 个答案:

答案 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的数组。