1. 程式人生 > 其它 >29-將十進位制數轉成二進位制數(二進位制>> 和掩碼實現)

29-將十進位制數轉成二進位制數(二進位制>> 和掩碼實現)

#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 (int
i = 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