C语言高手请解释下这段代码的具体意思。。。。

2025-01-05 05:42:31
推荐回答(3个)
回答1:

这里的i是用来控制位数的,i从1开始,一直往左移位,直到移动到全为0为止,比如第一次00000001,第二次是00000010,最后变成00000000
算法大概是这样:
1.首先是从要转换的数最低位开始,逐位与00000001相与,这样得到的是最末一位的数, if(value&1)
2.如果最末一位是1,则把answer的最后一位与1相与,实现把这个1保存下来,answer|=1;
3.接下来把value右移一位,判断下一位,同answer也要左移一位,把保存下来的值移开

最主要就是通过位移的办法,把源数据的最后一位拿出来判断,然后插入到新数据的末尾(新数据可以理解成最初只有一位,然后逐个插拉,直到最后写满八位)

回答2:

value是unsigned int型, 故定义unsigned int i,i的作用是控制value的每一位都能变换,也就是value有多少位,i从最低位1向左移多少位。
具体的实现:就拿你举的例子00001011。
answer=0;
i=1时:answer=0,判断value(00001011)的最低位是1,answer=answer | 1=1,value=value>>1=00000101
i=10:answer=10,value(00000101)的最低位是1,answer=11,value=00000010
i=100,answer=110,value(00000010)的最低位是0,answer不变,value=00000001
i=1000,answer=1100,value(00000001)的最低位是1,answer=1101,value=00000000;
.
.
.
.
i=10000000,answer=11010000;
i=00000000,循环结束

回答3:

for (i=1; i!=0; i <<= 1): 根据机器的int长度来循环 (在这里可能是16次, 把1移动到字长外面就变成0了) 执行下面的操作;
answer <<= 1: 将结果左移一位;
if (value & 1): 如果value的最低位为1, 则answer |= 1把answer的最低位设为1
value >>= 1: 将初始值右移一位
因为初始值跟结果的移动方向相反, 所以可以实现低位高位互换