首页 > 解决方案 > 无法理解这段代码的工作原理“binaryString[i] = ((number & 1) + '0')”

问题描述

这是来自演讲幻灯片的材料,但我似乎无法理解这部分内容:

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;
}

标签: cbinarybitwise-operators

解决方案


让我们binaryString[i] = ((number & 1) + '0')逐个分解:

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

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

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

最后,我们右移number一位,去掉我们刚刚看到的位:number = number >> 1;.


推荐阅读