无法理解这段代码如何工作“binaryString [i] =((number&1)+'0')”

问题描述 投票:0回答:2

这是讲座幻灯片的材料,但我似乎无法掌握这一部分:

binaryString[i] = ((number & 1) + '0')

检查每个位是否为1/0。

这是整个街区。

char *intToBinary(unsigned int number) { 
     char *binaryString = malloc(32+1); 
     int i;
     binaryString[32] = '\0';
     for (i = 31; i >= 0; i--) {
         binaryString[i] = ((number & 1) + '0');
         number = number >> 1;
     }
     return binaryString;
}
c binary bitwise-operators
2个回答
1
投票

让我们一点一点地打破binaryString[i] = ((number & 1) + '0')

首先,我们来看看(number & 1)。这将检查number中的最低有效位是否为1。如果是,则此表达式的计算结果为1,否则计算结果为0。

((number & 1) + '0')获取此前计算的结果并将其添加到0。如果number的最低位数是0,我们添加'0'0,得到'0'。否则,我们添加1'0',获得'1'。这是有效的,因为在C中,字符是数字类型,因此您可以添加它们; '0'之后的角色是'1',因此将1添加到'0'会给'1'

然后我们将这个结果('1''0')存储在我们的字符串中。

最后,我们将number一个接一个地移开,摆脱我们刚才看到的位:number = number >> 1;


0
投票

对于最右边的位为1的数字,此(number & 1)将返回1,否则返回0。 & 1通过将所有位(最右边的位除外)设置为0来工作,因为1就像二进制中的00000001

所以

XXXXXXXY
00000001 &
0000000?

如果Y为0,则如果Y为1或0则为1。

在此之后来了+ '0'。这是一个肮脏的技巧,但是当你获得ASCII表时很容易理解。 '0'的值在ASCII表中是48(十进制),'1'是49.所以((number & 1) + '0')会像(0 + '0')那样是'0'(1 + '0'),这是'1'。简而言之,他在这里填充了binaryString中的1和0字符。

© www.soinside.com 2019 - 2024. All rights reserved.