二进制数学过没?(这是高中数学有学的)
如果学过,应该下面的语句很容易理解。
部分代码如下:
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。
如有疑问或不明白请提问哦!
利用了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.顺序是自下而上的。
这个程序就是 按照这个规则写的。自己思考一下。