在C中签名vs unsigned int

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

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

谢谢!

half of the bits are allocated for negative integers这个语句不正确,一位被分配给常规整数的符号。

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

不是一半的 ,只有一位转换为一半的 。 也不是强制转换而是声明 :如果你正在重新解释它而没有给你额外的范围,它只会给你一个可能与原始用户意图不同的值。

仅使用一位来识别该数字是正数还是负数。

施放到无符号可能也可能没有意义。 有时最好让调试器等显示负数,以便让您知道您的号码已超出范围。

在比较无符号数时尤其需要小心 – 许多循环未能终止,因为倒计时值是无符号的,并且比较是<0。

一位用于+/-,而不是一半。 使用无符号数字可以使正值的范围加倍,而带符号则等于。