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  

posted @ 2021-08-08 12:27  学而不思则罔!  阅读(303)  评论(0)    收藏  举报