【发布时间】:2016-03-01 14:24:27
【问题描述】:
这个问题可能是非常基础的,但我只是在谷歌搜索了几天之后才在这里发布,并且我对 C 中的有符号整数有适当的基本了解。
其实有人说signed int有范围
- -32767 到 32767 和其他人说它有范围
- -32768 至 32767
让我们有 int a=5(有符号/让我们只考虑 1 个字节)
*a=5 的第一个表示表示为正数的 00000101,a=-5 表示为 10000101(因此范围 -32767 到 32767 是合理的) (这里的 msb/符号位是 1/0,数字将是正/负,其余(幅度位)不变)
*a=5的第二个表示为00000101为正数,a=-5表示为11111011 (msb 被认为是 -128,其余位被操作以获得 -5)(因此范围 -32768 到 32767 是合理的)
所以我混淆了这两件事。我的疑问是 c ,1) 或 2) 中带符号 int 的实际范围是多少
【问题讨论】:
-
您已经回答了您的问题。你在问什么?也许您想搜索“有符号整数的表示”。另请注意,这两个假设实际上都不是全部事实。
-
C 中的 int 没有固定的指定大小。只定义了最小值。在 2 的补码中,n 位类型的范围从
-2^(n-1)到2^(n-1)-1 -
取决于底层平台,是使用one's complement还是two's complement(常用的补码)。至于位大小,也要看,现在
int通常是32位。 -
signed int的实际范围是[INT_MIN ...INT_MAX]。范围是至少[-32767 ... 32767]。而已。如果您担心位表示,请使用unsigned