29-將十進位制數轉成二進位制數(二進位制>> 和掩碼實現)
阿新 • • 發佈:2021-08-08
#include <stdio.h> #include <limits.h> //CHAR_BIT表示當前系統char的位數,也就是每個byte的位數 #include <stdlib.h> int main() { printf("檢視當前系統byte的bit數:%dbits\n",CHAR_BIT ); //設定引數 //1.設定儲存bit值的陣列 char bit_arr[CHAR_BIT * sizeof(int) + 1]; //2.設定掩碼 int mask = 1; /* 1.怎樣獲取int值對應二進位制的最右側bit位上的值 1.利用掩碼 1.設定掩碼為00000001 引數: 00000101 & 00000001 結果:00000001*/ //3.接收鍵盤輸入的int值 printf("請輸入int值:\n"); int number; if(scanf("%d",&number) == 1) { printf("接收成功,當前number為:%d\n",number ); }else{ printf("接收引數失敗,請check!!!\n"); exit(1); } int number_bak = number; //4.依次向右移動number的二進位制,並將丟棄的bit值儲存到陣列中 //number的bit數 int size = CHAR_BIT * sizeof(int); for (inti = size -1 ; i >= 0; i--) { char last_bit = (mask & number) + '0'; //printf("%c", last_bit); bit_arr[i] = last_bit; //number = number >> 1; number >>= 1; } bit_arr[size] = '\0'; //5.輸入結果,4個bit為一組,列印字串 const char * str = bit_arr; printf("列印字串:%s\n", str ); printf("number:%d的二進位制表示為:\n", number_bak); int i = 0; while(str[i]) { putchar(str[i++]); if(i % 4 == 0) { printf(" "); } } printf("\n"); return 0; }
結果:
dawang:C dxm$ gcc hello.c ;./a.out
檢視當前系統byte的bit數:8bits
請輸入int值:
-5
接收成功,當前number為:-5
列印字串:11111111111111111111111111111011
number:-5的二進位制表示為:
1111 1111 1111 1111 1111 1111 1111 1011
v-gaocun-dxm:C dxm$ gcc hello.c ;./a.out
檢視當前系統byte的bit數:8bits
請輸入int值:
5
接收成功,當前number為:5
列印字串:00000000000000000000000000000101
number:5的二進位制表示為:
0000 0000 0000 0000 0000 0000 0000 0101