有符号整数类型
在有符号整数类型中,最高位(通常是 最左边的位)表示 符号位,用于指示该数是正数还是负数。
符号位的含义:
- 符号位为 0:表示该整数是 正数 或者零。
- 符号位为 1:表示该整数是 负数。
补码表示法
在计算机中,负数通常使用 补码 来表示。补码表示法的步骤如下:
- 正数的补码表示就是它的原码。
- 负数的补码表示是通过将该正数的二进制表示取反(每位取反)再加 1。
运算
- 对于加法,直接进行二进制加法。
- 对于减法,将减法转换为加法,通过加上一个负数来实现。
5+-5=0,也就是 0000 0101 + x = 0000 0000, 手动算一下减法,x= 1111 1011。
在8位的系统中:
- 正数 5 的二进制表示是 0000 0101。
- 负数 -5 的表示过程是:
- 将 5 的二进制按位取反:1111 1010
- 加1:1111 1011 因此,-5 的补码表示是 1111 1011。
1 | 00000101 (5) |
net中int数值类型取值范围问题
| 二进制 | 十进制 | 十进制次方 |
|---|---|---|
| 1 | 1 | 2^1-1 |
| 11 | 3 | 2^2-1 |
| 111 | 7 | 2^3-1 |
| 1111 | 15 | 2^4-1 |
| 11111 | 31 | 2^5-1 |
| 10 | 2 | 2^1 |
| 100 | 4 | 2^2 |
| 1000 | 8 | 2^3 |
| 10000 | 16 | 2^4 |
int 取值范围 -2^31~2^31 - 1
为什么是31次方 ,int类型数据存在用4个字节(B、byte)转换位为32位(bit)
正整数最大值
32位的第一位存放符号位 0 表示正数
0 1111111 11111111 11111111 11111111 可以计算成 2^31-1=2,147,483,647负数最小值
32位的第一位存放符号位 1 表示复数
1 0000000 00000000 00000000 00000000 -2^31 = -2,147,483,648
计算过程:
–> 去掉符号位
0000000 00000000 00000000 00000000
–> 取反
1111111 11111111 11111111 11111111
–> 补码
1111111 11111111 11111111 11111111 + 1 = 10000000 00000000 00000000 00000000
– 计算
10000000 00000000 00000000 00000000 = 2^31 =2,147,483,647
–带上符号位
-2,147,483,647
net中有符号整数类型 sbyte(8位) 、short(16位)、int(32位)、long(64位)都适用上面算法。
int 负数最大值
1 1111111 11111111 11111111 11111111 原码
负数 的补码表示是其对应正数的二进制反转加 1。
1111111 11111111 11111111 11111111 反码 0000000 00000000 00000000 00000000
0000000 00000000 00000000 00000000 补码 0000000 00000000 00000000 00000001
0000000 00000000 00000000 00000001 = 1
带上符号位最终结果是 -1