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 @   学而不思则罔!  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示