mission12337 2022-03-07 21:18 采纳率: 75%
浏览 21
已结题

这个方法是求二进制的,但是有一些代码没有看明白, ps:如果我的注释有问题,请指出

char* convert_2(int dec)
{
char* the_String = (char*) malloc(sizeof (int) * Bits_in_Byte + 1);//sizeof(int)=4,the_String=4*8+1=33
int i = 0;
int bitMask = 1;
int tempbitMask = 0;
for(i = sizeof (int) * Bits_in_Byte -1; i>= 0; i--) {//i=31

    tempbitMask =  bitMask<<i;_**//tempbitMask = bitMask*2^i**_

    if(tempbitMask & dec)//这个循环没看懂

        the_String[31-i]  = '1';

    else {
        the_String[31-i] = '0';

    }

}

the_String[32] = 0;
return the_String;

}

  • 写回答

1条回答 默认 最新

  • 一只蚂蝼 2022-03-08 09:17
    关注
    
    char* convert_2(int dec)
    {
        //这里就是申请一个大小为33的动态字符数组
        char* the_String = (char*) malloc(sizeof (int) * Bits_in_Byte + 1);//sizeof(int)=4,the_String=4*8+1=33
        int i = 0;
        int bitMask = 1;
        int tempbitMask = 0;
    
        //这里就是这个函数的主体算法,循环次数为32次,因为条件为大于等0,所以0的那一次也会运行,其实就是每次循环取一个位
        for(i = sizeof (int) * Bits_in_Byte -1; i>= 0; i--) {//i=31
    
            //你这个转换的公式是没问题的,但是这里主要不是看它的十进制值,而是二进制值,
            //你代入一下会发现第一次的值为 1000 0000 0000 0000 0000 0000 0000 0000(最右为0位,最左为31位)
            //第二次的值为                0100 0000 0000 0000 0000 0000 0000 0000
            //第三次的值为                0010 0000 0000 0000 0000 0000 0000 0000
            //这个值其实是为了能够与一个值相与以取这个值某个位,具体是哪一个位就看tempbitMask里面1的位置
            //以第一次为例,就是取31位的值,第二次就是30位,一直到0位
            tempbitMask = bitMask << i;//tempbitMask = bitMask*2^i
    
            //emmm,这是if判断,然后tempbitMask & dec这个运算就是取dec第i位的数据,
            //因为是二进制,值只有0/1所以就用if判断写'0''1'两种字符了
            //想要理解这种以位相与取位的原理,最好还是取几次循环的的情况代入值自己用计算器算一下,很容易就能明白
            if(tempbitMask & dec)//这个循环没看懂
     
                the_String[31 - i]  = '1';//进入此分支代表dec的第i位为1所以就写入'1'
     
            else {
                the_String[31 - i] = '0';//同上
    
            }
     
        }
     
        //这里就是为什么32个位却申请了33个字符的原因,字符串需要一个字符在字符串的最后存放字符串结束符(即'\0'0也可以)
        the_String[32] = 0;
        return the_String;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月7日

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算