为什么int16类型限制为32,768,如果最多16位为65,535?

时间:2017-06-29 15:30:46

标签: c# clr

16位全部" 1"位将导致65,535:

第一个字节: 1(128)1(64)1(32)1(16)1(8)1(4)1(2)1(1)

第二个字节: 1(327,68)1(16,384)1(8,192)1(4,096)1(2,048)1(1,024)1(512)1(256)

小数将是:

32,768 + 16,384 + 8,192 + 4,096 + 2,048 + 1,024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1

总计:65,535

int16的最大值应为65,535和32,768(仅为1000 0000 0000 0000)

我无法理解其他情况。

5 个答案:

答案 0 :(得分:5)

因为它的范围是-32,768到32,767,总和是65,536(这里包括0)可能的值。

如果使用UInt16(代表unsigned int16),则可以给它一个65,535的值。

答案 1 :(得分:2)

signed int和unsigned int之间的区别。 16位无符号整数范围为[0,65535]。而16位有符号的int范围[-32768,32767]。 int16的最大值应为32767而不是32768。

答案 2 :(得分:2)

Int16已签署。最重要的位表示符号(0表示正数,1表示负数)。 MSB为0时可达到的最高数为0111 1111 1111 1111,即十进制的32767。

它是以这种方式设计的,因此无符号加法/减法也适用于有符号数。因此,要获得-1,从0减去1,得到1111 1111 1111 1111(由于溢出)。如果你继续减去,你最终会达到1000 0000 0000 0000 = -32768(dec),这是可以表示为int16的最低负数。

所以,2 ^ 16 = 65536,这是可表示值的总数。这相加:(a)1为零值,(b)32767正数,(c)32768负数。

答案 3 :(得分:2)

有符号整数和无符号整数之间存在差异。 一个人有能力为负,而另一个则没有。

它不仅适用于int16,也适用于其他类型。

+--------+----------------------------+----------------------------+--------------------------+
|  Type  |            Min             |            Max             |           Size           |
+--------+----------------------------+----------------------------+--------------------------+
| sbyte  | -128                       | 127                        | Signed 8-bit integer     |
| byte   | 0                          | 255                        | Unsigned 8-bit integer   |
| char   | U+0000                     | U+ffff                     | Unicode 16-bit character |
| short  | -32,768                    | 32,767                     | Signed 16-bit integer    |
| ushort | 0                          | 65,535                     | Unsigned 16-bit integer  |
| int    | -2,147,483,648             | 2,147,483,647              | Signed 32-bit integer    |
| uint   | 0                          | 4,294,967,295              | Unsigned 32-bit integer  |
| long   | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807  | Signed 64-bit integer    |
| ulong  | 0                          | 18,446,744,073,709,551,615 | Unsigned 64-bit integer  |
+--------+----------------------------+----------------------------+--------------------------+

答案 4 :(得分:1)

你忘记了这个标志。 int16是一个有符号的类型,所以它实际上是:

第一个字节:...
第二个字节:符号(+或 - )1(16,384)...

涵盖范围从-32768到32767(0被认为是正数) 大多数情况下,0表示正数,1表示负数:Sign bit

如果它是uint16(u代表无符号),那将是完全不同的事情:

第一个字节:...
第二个字节:1(32768)...

反过来,范围从0到65535。