如果你使用高级编程语言,你可能遇到过有符号和无符号整数。下面是对它们的简单介绍。
以比特形式存储的整数
在引擎下,整数以比特(二进制数字)形式存储,这意味着它们由0 和1 。如果你有一个4位整数,有四个槽用于0和1,如果你有一个16位整数,有16个槽用于0和1。
下面是几个有效的4位整数。
- 0000
- 0101
- 1000
- 1110
每一个0和1的排列组合都会代表一个不同的整数。
有符号性
那么,这些位的组合代表什么?这取决于整数是有符号还是无符号。有符号的整数意味着该数字可以是负数、零数或正数,无符号的整数意味着该数字只能是零或正。如果你的整数可以有一个负号,那么它就是有符号的!
让我们来看看这对我们的4位案例来说是如何运作的。
4位整数,有符号与无符号
| 编码 | 无符号 | 有符号的 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | -8 |
| 1001 | 9 | -7 |
| 1010 | 10 | -6 |
| 1011 | 11 | -5 |
| 1100 | 12 | -4 |
| 1101 | 13 | -3 |
| 1110 | 14 | -2 |
| 1111 | 15 | -1 |
请注意,我们的无符号4位整数的范围是0到15,而我们的有符号4位整数的范围是-8到7。 在这个例子中,有符号整数的第一位被称为符号位,因为它决定了相关整数是正数还是负数--如果第一位是1 ,那么这个整数就是负数。
事实上,在决定使用有符号整数还是无符号整数时,一个考虑因素是你是否需要容纳负数--只有有符号的整数才能做到这一点!当然,你可以看到,通过允许一些组合来代表负数,我们的整数的最大可能值较低。一个权衡的结果!
**注意:**上表中无符号整数的表示方法被称为二进制补码,在大多数现代计算设备上使用。你可以在维基百科上了解更多关于其他有符号数字的表示方法。
一些关于整数范围的快速数学运算
正如我之前提到的,4位整数有不同的可能范围,这取决于该整数是否被签名。如果有符号,范围是-8到7;如果无符号,范围是0到15。
这是有公式可循的!其中n 是比特数,以下情况成立。
有符号的整数可以在-(2n-1)和2n-1 - 1之间。
无符号整数可以在0和2n - 1之间。
用4来表示n,我们可以看到它在我们手工操作的情况下是成立的。
有符号的
最小值:-(24-1)=-(23)=-8
最大:24 - 1- 1 = 8 - 1 = 7
无符号
最小值。0
最大:24-1=16-1=15
总结
我希望你今天学到了一些关于整数的知识!如果你觉得有趣,我鼓励你继续挖掘你所听到的基础性话题。