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