有符号整数和无符号整数之间的区别是:
Unsigned值可以是一个较大的正数,而不能是负数。 Unsigned版本使用前导位作为值的一部分,而signed版本使用最左边的位来识别数字是正还是负。 有符号整数可以同时包含正数和负数。
还有其他区别吗?
有符号整数和无符号整数之间的区别是:
Unsigned值可以是一个较大的正数,而不能是负数。 Unsigned版本使用前导位作为值的一部分,而signed版本使用最左边的位来识别数字是正还是负。 有符号整数可以同时包含正数和负数。
还有其他区别吗?
当前回答
是的,无符号整数可以存储大的值。 不,有不同的方式来表示正数和负数。 是的,有符号整数可以包含正数和负数。
其他回答
另一个区别是在不同大小的整数之间进行转换时。
例如,如果你从字节流中提取一个整数(简单来说就是16位),使用无符号值,你可以这样做:
i = ((int) b[j]) << 8 | b[j+1]
(可能应该强制转换第二个字节,但我猜编译器会做正确的事情)
对于有符号的值,你必须担心符号扩展,并做:
i = (((int) b[i]) & 0xFF) << 8 | ((int) b[i+1]) & 0xFF
为了完整起见,这里只提几点:
this answer is discussing only integer representations. There may be other answers for floating point; the representation of a negative number can vary. The most common (by far - it's nearly universal today) in use today is two's complement. Other representations include one's complement (quite rare) and signed magnitude (vanishingly rare - probably only used on museum pieces) which is simply using the high bit as a sign indicator with the remain bits representing the absolute value of the number. When using two's complement, the variable can represent a larger range (by one) of negative numbers than positive numbers. This is because zero is included in the 'positive' numbers (since the sign bit is not set for zero), but not the negative numbers. This means that the absolute value of the smallest negative number cannot be represented. when using one's complement or signed magnitude you can have zero represented as either a positive or negative number (which is one of a couple of reasons these representations aren't typically used).
在嵌入式系统上编程时,必须使用无符号整数。在循环中,当不需要有符号整数时,使用无符号整数将节省设计此类系统所需的安全。
(回答第二个问题)通过只使用符号位(而不是2的补码),你可以得到-0。不太漂亮。
根据我们在课堂上学到的,有符号整数既可以表示正数也可以表示负数,而无符号整数只能表示非负数。
例如,看一个8位的数字:
无符号值为0到255
带符号的取值范围为-128 ~ 127