c - 按位运算符的说明

标签 c

我一直在对变量执行按位运算。

int p=3,q=5;
int a=~p,b=~q; //complement a and b
printf("%d %d\t%d %d",p,a,q,b);

'b' 的理论输出是 10,如果它是有符号的,它必须是 -2。 但是输出是-6。

有人可以向我解释一下它的工作原理吗?

最佳答案

~ 是 c(或 python)中的按位补码运算符,它本质上是计算 -x - 1

所以表格看起来像:

0  -1
1  -2
2  -3
3  -4 
4  -5 
5  -6

在二进制补码表示中,如果数字 x 的最高有效位为 1,则实际值为 −(~x + 1)。

例如,

0b11110000 = -(~0b1111 + 1) = -(15 + 1) = -16.

这是负数的自然表示,因为

0000001 =  1
0000000 =  0
1111111 = -1  (wrap around)
1111110 = -2
1111101 = -3 etc.

参见 http://en.wikipedia.org/wiki/Two%27s_complement了解详情。

关于c - 按位运算符的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13265808/

相关文章:

c - 确定 utf-8 字符的宽度(以字节为单位)

c - 在 C 中打印字符串和空字符的概念

c - 如何打印旅行商问题中的路径

C程序没有正确添加 float

c - Win32 GUI应用程序: how to get stderr messages into messagebox

c - 为什么更新的结构变量不打印

c - 给定一组 UNIX 命令的管道

c - 在 C 中处理字符串

c - 如何将从文本文件读取的字符重写到c中的新文本文件中?

c - 是否需要写一个 "portable"if (c == '\n' )来处理跨平台文件?