gpt4 book ai didi

c - 如何在C中表示signed int?

转载 作者:行者123 更新时间:2023-11-30 14:23:52 26 4
gpt4 key购买 nike

我是 C 语言新手,这是一个新手问题:

我遇到了这段关于有符号 int 表示的代码:

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,不是我所期望的,知道吗?

最佳答案

您混淆了表示形式和“最左边”(最重要)位的实际含义。当系统在内存中表示 int(我将使用 32 位)时,它会占用类型定义的位数,而不是保存该数字所需的位数。根据变量的类型,甚至可能需要更多的时间才能将其置于良好的起始位置以供以后访问(填充/对齐)。

您的整数可以这样表示,最右边的 4 位的二进制值为 9:

 0b00000000000000000000000000001001

正如你所看到的,最左边的位肯定不是 1。你的 int 可能不是 32 位,但任何超过 4 的值都会给你同样的故事。做出相同的假设,您可以查看实际设置最高有效位的结果,在我打印 0x80000009 的测试中,得到的结果为 -2147483639。

关于c - 如何在C中表示signed int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com