将超出范围(负)值分配给无符号整数类型

时间:2016-10-22 05:12:36

标签: c++ types

好吧,这可能是一个愚蠢的问题。但是,就在这里。

如果我在C ++中为无符号整数类型指定负值,例如“unsigned short a = -1”。

上例中的a值设置为65535(2 ^ 16 - 1)。而且我知道如果我将一个超出范围的值设置为无符号整数,则设置的值将是可存储最大大小的数字的模数(在这种情况下为65536),您能否解释一下后面的数学计算结果场景?

(-1)模65536 = 65535怎么样?它不应该是-1本身吗?

1 个答案:

答案 0 :(得分:0)

它是1 MSB位的差异。在签名中,该1位用于存储数字的否定性。在无符号时,用于存储值。它不是内部工作的数学,它基本上是位模式操作,使两者之间产生差异。