rul*_*lof 1 c c++ binary bit-manipulation
我正在尝试使用 Bitwise NOT 获取整数的值,但没有得到我期望的值。
#include <stdio.h>
int main(){
int i = 16;
int j = ~i;
printf("%d", j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
16 不应该是:
00000000000000000000000000010000
Run Code Online (Sandbox Code Playgroud)
所以 ~16 应该是:
11111111111111111111111111101111
Run Code Online (Sandbox Code Playgroud)
为什么我没有得到我期望的结果,为什么结果是负面的?
这就是我想要做的:
我有一个例如 27 的数字,它是:
00000000000000000000000000011011
Run Code Online (Sandbox Code Playgroud)
并且想要检查每一位是 1 还是 0。
所以我需要得到这个值
11111111111111111111111111110111
Run Code Online (Sandbox Code Playgroud)
使用第二个来检查第一个的第 3 位是否设置为 1。
尽管可以对编译器行为提出一些迂腐的观点,但简单的答案是signed int设置了最高位的 a 是负数。
因此,如果您做了一些设置 an 的最高位int(有符号整数,而不是无符号整数)的操作,然后让工具/库向您显示那个值int,您将看到一个负数。
这不是一个普遍的真理,但对于大多数现代系统来说,它是一个很好的近似值。
请注意,它printf正在此处进行表示 - 因为将%d数字格式化为带符号。%u可能会给出您期望的结果。仅仅改变变量的类型是不够的,因为printf对它的参数类型一无所知。
我会说,作为一般的经验法则,如果您要进行位操作,则使用unsigned ints 并以十六进制显示它们。那样生活会更简单,而且最符合意图。(花式加速数学技巧是一个明显的例外)