【发布时间】:2012-09-15 01:40:36
【问题描述】:
我是 C 新手,这是一个新手问题:
我遇到了这段关于有符号整数表示的代码:
int main(void) {
int a = 0x8fffffff;
printf("%d\n",a);
return 0;
}
它返回-1879048193。
我目前对signed int的理解是最左边的位用于负或正指示:
所以0x9 应该评估为有符号十进制-1,因为它的左侧位是1:
int main(void) {
int a = 0x9;
printf("%d\n",a);
return 0;
}
但它给了我小数点 9,不是我所期望的,知道吗?
【问题讨论】:
-
按照该逻辑,任何事物中最重要的位都是 1。 9 是 0b1001,但考虑到 int 不是 4 位。把它想象成 0b00000000000000000000000000001001 表示 32 位整数。
-
@MitchWheat,没错,这超出了我的初衷。
-
您没有考虑 int 在您正在编译的平台上的字节数。看看 sizeof(a) 给你什么。
-
按您的逻辑,1 应该代表 -1,因为它至少包含一个已设置的位。这听起来合理吗?
-
维基百科关于二进制补码的文章其实很不错,用来描述这类事情。 wikipedia