c - 为什么以下按位运算会返回意外结果?

标签 c

3 位最多可以容纳 7 (4 + 2 + 1)。我正在尝试使用按位运算来计算它。

3 is 0b011 
~3 is 0b100

按位或我期望 0b111(即 7)。相反,我得到了

int result = (~3) | 3;
printf("%i\n", result);

-1

我做错了什么?

最佳答案

你做的一切都是对的:N | ~N 产生一个由全 1 组成的二进制表示形式的数字。这样的数字在 two's compliment 中被解释为 -1负数的表示。

关于c - 为什么以下按位运算会返回意外结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159732/

相关文章:

c - C 中的 16 位 float 乘法

c - 程序什么时候识别EOF?

c - 无法满足 K&R 练习 5-11 的要求

使用 SDL 1.2 的 C 中的自定义旋转功能无法正常工作

c - 使用 scanf 后程序崩溃

php - C 和 PHP : Storing settings in an integer using bitwise operators?

条件函数定义

c - 使用指针在 C 中删除重复项时出错

c - 弹丸运动程序 : What's wrong with this program?

c - 使用 uint64_t 进行转换无法按预期工作