gpt4 book ai didi

c - 为什么 int 可以容纳 10 位数字,但不能容纳另一个整数的 9 位数字?

转载 作者:行者123 更新时间:2023-11-30 19:03:07 25 4
gpt4 key购买 nike

这个问题可能已经得到了回答,我不太确定如何措辞,但这里什么也没有。我正在 Linux 上使用 gcc 进行编译。我的问题是,为什么当我将十个 9 分配给 int 变量时,编译器会抛出溢出警告,但当我分配使用十位数字的值“1234567891”时,编译器不会抛出溢出警告。如果我分配值“12345678912”就会这样。

#include <stdio.h>

int main(void)
{
int a = 1234567891;
int b = 9999999999;

printf("%d, %d\n", a, b);

return 0;
}

test.c:6:11: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘9999999999’ to ‘1410065407’ [-Woverflow] int b = 9999999999;

test.c:6:11: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘12345678912’ to ‘-539222976’ [-Woverflow] int b = 12345678912;

仅输出十个整数:

~/Programming$ ./a.out 1234567891

最佳答案

它与以 10 为基数的“位数”无关,或者,如果您愿意的话,也与您写出数字时的数字长度(同样以 10 为基数)无关。限制的最基本原因是计算机以位和字节的形式存储数字(以及其他所有内容),这意味着它们以 2 为基数工作。

c 中的 int 是 4 字节(32 位)数据类型。如果 int 有符号或 0,它可以存储 -2,147,483,648 (-231) 到 2,147,483,647 (231 - 1) 范围内的数字如果不是,则为 4,294,967,295 (232-1)。

无论哪种方式,1234567891 都在 4 个字节的范围内,但 9999999999 和 12345678912 则不在范围内。

<小时/>

注意:我知道规范允许 int 为 2 个字节,但只有当 OP 使用包含 int 的实现时,OP 描述的行为才有可能是 4 个字节。

关于c - 为什么 int 可以容纳 10 位数字,但不能容纳另一个整数的 9 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54614332/

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