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