在C中签名vs unsigned int

时间:2011-09-26 22:48:26

标签: c int

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

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

谢谢!

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:5)

不是的一半,只是一个位,它转换为值的一半。也不是投射,而是声明:如果你投射某些东西你正在重新解释它并没有给你额外的范围,它只是给你一个潜在的不同于原始用户的价值。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:0)

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