c语言,那位大神解释一下下面的代码

这个是怎么做到逐一提取每一位的信息的
2024-11-20 07:45:59
推荐回答(2个)
回答1:

二进制数学过没?(这是高中数学有学的)
如果学过,应该下面的语句很容易理解。
部分代码如下:
if(buff %2 ==1){ //buff除以2余1
s[i]='1';
}else{ //不出余1那就是余0了
s[i]='0';
}
buff /= 2; //buff自除2

举个例子:若
buff= 10110010; (实际上有32位,这里举8位方便些)
buff %2 得到最低为 0,因为二进制最低位偶数为0,奇数为1。
然后 buff /= 2; 二进制数除以2,那就是整个数字右移一位。
即 01011001。
如有疑问或不明白请提问哦!

回答2:

利用了10进制转2进制的数学算法:
比如10进制的17,转2进制:

17/2  = 8 ... 1
 8/2  = 4 ... 0
 4/2  = 2 ... 0
 2/2  = 1 ... 0
 1/2  = 0 ... 1
 结果就是倒序的10001。这个例子有点特殊,首尾都是1.顺序是自下而上的。
这个程序就是 按照这个规则写的。自己思考一下。