2
我知道两个补码表示法。我想知道在int
和unsigned int
之间的具体差异是什么。我比执行有符号和无符号整数的区别C++
- 比较是不同的(符号位将改变如何执行比较)。
- 乘法是不同的(我取模数,乘这样的模块和基于两个操作数的符号补充结果)。
- 分区不同(乘法的原因相同)。
- 加减法看起来是一样的
是否有可能,我不知道有任何其他方面的差异?
我知道两个补码表示法。我想知道在int
和unsigned int
之间的具体差异是什么。我比执行有符号和无符号整数的区别C++
是否有可能,我不知道有任何其他方面的差异?
因为这是最常见的,所以我假定双补数算术。
这里有很多关于二进制补码算术的解释。例如,评论中的链接和这里的乘法:http://pages.cs.wisc.edu/~smoler/cs354/beyond354/int.mult.html
既然你特意标记了C++,'unsigned int'“wrap around”,但是'signed int'溢出的是未定义的行为。 – BoBTFish
我认为它们之间的唯一区别是,“int”是二进制补码,而“unsigned int”不是二进制补码,所以'int'中的'2^31'是负数,而'unsigned int'中的'2^31' int'是一个正数,对于'int'和'unsigned int'中小于31的所有位是正数 –
带符号的int用于表示负数和正数,因此 有符号整数的值范围为:-2147483648到2147483647 (无符号):0至4294967295. 有符号整数对于负值使用二进制补码。 例如8位有符号值(-1)表示为1111 1111.下一个规则用于负值表示:000 0001(invert) - > 1111 1110(加1) - > 1111 1111 – arturx64