簡體   English   中英

十進制到二進制的轉換方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM