【发布时间】:2016-07-09 17:05:35
【问题描述】:
我试图了解 C 中的按位补码运算符究竟返回了什么。 (不是“哪个值”,而是“哪个数据类型”。我想我理解位补码在理论上是如何工作的,所以不需要重新解释)
考虑以下代码:
int main(int argc, char **argv){
char c = 'A';
printf("%d, %d\n", sizeof(c), sizeof(~c));
return 0;
}
虽然第一个 sizeof() 返回 1,但后者在我的机器上返回 4。
所以我的问题是:~c 属于哪个数据类型?
我在 32 位 Linux 上工作,如果我在 64 位机器上工作,结果会变为 8 吗?到目前为止,我最好的猜测是,按位运算应用于寄存器并且返回值不会转换回 char 值。对于其他编译器,这种行为是否会有所不同,或者 C 标准是否定义了返回的内容~c?
【问题讨论】:
-
~是 1 的补码,而不是 2 的补码
标签: c