在C中签名vs unsigned int

dmu*_*ubu 4 c int

我是C初学者,需要快速澄清有关整数.

当你将某个东西作为一个32位的int转换时,一半的位被分配给负整数.因此,如果您知道您将始终具有正整数,则将某些内容作为无符号整数推送应该最大化您的正位,因此当您知道输出将始终为正时更有意义.这是真的?

谢谢!

ami*_*mit 9

half of the bits are allocated for negative integers 这种说法不正确,一位被分配给常规整数的符号.

但是,你的假设是正确的.如果你是肯定的,那么数字是正的,使用unsigned int将允许你访问[0,2 ^ 32]范围内的数字,而常规int将只允许[ - (2 ^ 31),2 ^ 31-1],因为你不需要负值,所以它会减少正数.


Ben*_*son 5

不是一半的,只有一位转换为一半的.还没有铸造,但宣称:如果你你重新诠释它的东西不给你额外的范围,它只是给你比原来的用户意图的潜在不同的值.