当我将一元" - "运算符应用于无符号整数时会发生什么?

use*_*863 5 c bit-manipulation

这应该是一个非常简单的问题,但我似乎无法在我的教科书中找到答案,也找不到合适的关键字来在线找到它.

当你在unsigned int前面有一个负号时,它是什么意思?

具体来说,如果x是一个等于1的unsigned int,那么-x的位值是多少?

nne*_*neo 10

根据C标准,无符号整数的算术以2 位宽度模数执行.因此,对于32位整数,否定将采用mod 2 32 = 4294967296.

对于一个32位的数字,那么,价值因此当你否定了一些获得n将是0-n = 4294967296-n.在您的特定情况下,假设unsigned int是32位宽,您将得到4294967296-1 = 4294967295 = 0xffffffff(设置所有位的数字).


C标准中的相关文本见§6.2.5/ 9:

无法用结果无符号整数类型表示的结果以模数减少为模数,该数字大于可由结果类型表示的最大值