c - 无法理解这段代码的工作原理“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;
}
解决方案
让我们binaryString[i] = ((number & 1) + '0')
逐个分解:
首先,我们来看看(number & 1)
。这将检查最低有效位number
是否为 1。如果是,则此表达式的计算结果为 1,否则计算结果为 0。
((number & 1) + '0')
获取先前计算的结果并将其添加到0
. 如果 的 最低有效位number
是0
,我们加上'0'
and 0
,得到'0'
。否则,我们添加1
and '0'
,得到'1'
。这是可行的,因为在 C 中,字符是数字类型,因此您可以添加它们;之后的字符'0'
是'1'
,所以添加1
到'0'
给'1'
。
然后我们将此结果('1'
或'0'
)存储在我们的字符串中。
最后,我们右移number
一位,去掉我们刚刚看到的位:number = number >> 1;
.
推荐阅读
- python - 如何检查某些输入是否属于 sympy 函数?
- android - 如何同时从本地电话簿和谷歌联系人中获取所有联系人?
- android - ConstraintLayout that should support portrait and landscape modes -with a button to toggle full screen
- javascript - 如何在不模拟 ActivatedRouteSnapshot 的情况下测试角度防护/解析器
- go - 如何在 Github 上设置我的 Golang 项目版本
- python - 使用 GoogleNews-vectors-negative300.bin 构建字典返回 ValueError: could not convert string to float
- sql - 使用 JSON_MODIFY 更新 JSON
- sql - 如何在 SQL Server where 子句中忽略 ' 字符?
- python - 考虑到过去,如何在时间序列中插入非线性缺失数据?
- awk - 选择具有 2 行依赖关系的模式