gpt4 book ai didi

c - 短类型可以在 C 中存储的最大和最小数字是多少?

转载 作者:IT王子 更新时间:2023-10-28 23:33:45 24 4
gpt4 key购买 nike

我很难掌握 C 中的数据类型。我正在阅读一本 C 书籍,其中一个挑战是 short 的最大和最小数字是多少可以存储。

使用 sizeof(short);我可以看到一个 short 消耗 2 个字节。这意味着它是 16 位,这意味着两个数字,因为存储数字的二进制表示需要 8 位。例如,9 将是 00111001填满一点。那么无符号的不是0到99,有符号的不是-9到9吗?

我知道我错了,但我不知道为什么。它说 here有符号的最大值为 (-)32,767,无符号的最大值为 65,535。

short int, 2 Bytes, 16 Bits, -32,768 -> +32,767 Range (16kb)

最佳答案

想一想十进制。如果您只有 2 位数字,这意味着您可以在其中存储从 0099 的数字。如果您有 4 位数字,则该范围变为 00009999

二进制数类似于十进制,只是数字只能是01,而不是01 , 2, 3, ..., 9.

如果你有这样的号码:

01011101

这是:

0*128 + 1*64 + 0*32 + 1*16 + 1*8 + 1*4 + 0*2 + 1*1 = 93

如您所见,您可以在一个字节中存储比 9 更大的值。在一个无符号的 8 位数字中,您实际上可以将值从 00000000 存储到 11111111,即十进制的 255。

在一个 2 字节的数字中,此范围从 00000000 00000000 变为 11111111 11111111,恰好是 65535。

您的说法“存储数字的二进制表示需要 8 位”就像说“存储数字的十进制表示需要 8 位”,这是不正确的。例如,数字 12345678901234567890 的位数超过 8 位。同样,您不能将 所有 数字放入 8 位,而只能容纳 256 个。这就是你得到 2 字节 (short)、4 字节 (int) 和 8 字节 (long long) 数字的原因。事实上,如果您需要更大范围的数字,则需要使用库。

只要涉及负数,在 2 的补码计算机中,它们只是将范围的上半部分用作负值的惯例。这意味着左侧有 1 的数字被认为是负数。

尽管如此,这些数字是 congruent 模 256(模 2^n 如果 n 位)到它们的正值,正如数字所暗示的那样。例如数字 11111111 如果无符号则为 255,如果有符号则 -1 是模 256 全等。

关于c - 短类型可以在 C 中存储的最大和最小数字是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711341/

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