【发布时间】:2017-06-07 20:17:14
【问题描述】:
我知道两个补码表示。我想知道在int 和unsigned int 之间的实施方面有什么具体区别。我会这么说
- 比较不同(符号位会改变比较的执行方式)。
- 乘法不同(我取模,将这些模块相乘,然后根据两个操作数的符号对结果求补)。
- 除法不同(乘法原因相同)。
- 加法和减法看起来一样
还有其他我可能不知道的差异吗?
【问题讨论】:
-
由于您专门标记了 C++,
unsigned int“环绕”,但对于signed ints,溢出是未定义的行为。 -
我认为它们之间的唯一区别是,
int是二进制补码,unsigned int不是二进制补码,所以int中的2^31是负数,但2^31中unsigned int是一个正数,对于int和unsigned int中小于 31 的幂,所有位都是正数 -
有符号整数用于表示负数和正数,因此有符号整数的取值范围:-2147483648 到 2147483647 无符号:0 到 4294967295。有符号整数使用二进制补码表示负值。例如 8 位有符号值 (-1) 表示为 1111 1111。接下来的规则用于负值表示:000 0001( 反转 ) -> 1111 1110( 加一 )-> 1111 1111
标签: c++ integer implementation