有符号和无符号整数?

6

请问有人可以向我解释一下有符号整数和无符号整数吗?因为我需要在作业中对它们进行解释。

当然,我知道什么是普通整数,并使用以下描述:

"整数是一个整数,可以是正数、负数和零,但不能有小数点。"

但我不太确定有符号和无符号的区别。

谢谢。


“Signed” 包括符号(负数或正数)。 “Unsigned” 不包括符号 - 只能是非负数。你可能可以在维基百科或其他地方找到大量信息。 - Reinstate Monica -- notmaynard
3个回答

7

在大多数编程语言中,当你声明一个整数时,你声明的是有符号整数。如果你想声明一个无符号整数,你必须明确告诉编译器。例如,在C#中:

int a; // Signed int
uint b; // Unsigned int.

signed int和unsigned int的区别在于,signed int中的一位用于表示数字是正数还是负数。而在unsigned int中,该位用于存储一个值。这意味着,在unsigned int中,您可以存储的绝对值是signed int的两倍。换句话说,C#整数的范围为-2,147,483,648到2,147,483,647,而uint的范围为0到4,294,967,295。这两种数据类型都是32位数据类型。


2

有符号整数和无符号整数的区别在于,有符号整数需要一个字节来保存符号。

例如,使用两个二进制数字,可以得到以下结果:

Base 2   Base 10
00       0
01       1
10       2
11       3

然而,如果我们将第一个数字解释为负数(0)或正数(1)
Base 2   Base 10
01       -1
00       0
10       1
11       2

或者,如果我们希望1成为负数,而0则为正数:

Base 2   Base 10
01       1
00       0
10       -1
11       -2

如需了解更多,请查看维基百科关于二进制补码的文章。


一个整数使用了一个比特 - SwaroSh

-1
通常当你说int时,它是有符号的int。 (有符号)int的范围为-32768至32767, 但无符号int的范围为0至65535。
int的无符号变量类型可以保存零和正数,但有符号的int可以保存负数、零或正数。

1
这对于16位是正确的,但对于32位、64位等则不准确。如果您进行修改,那么我的-1将变成+1。 - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接