int类型取值范围
song

有符号整数类型

在有符号整数类型中,最高位(通常是 最左边的位)表示 符号位,用于指示该数是正数还是负数。
符号位的含义:

  • 符号位为 0:表示该整数是 正数 或者零。
  • 符号位为 1:表示该整数是 负数

补码表示法

在计算机中,负数通常使用 补码 来表示。补码表示法的步骤如下:

  • 正数的补码表示就是它的原码。
  • 负数的补码表示是通过将该正数的二进制表示取反(每位取反)再加 1。

运算

  • 对于加法,直接进行二进制加法。
  • 对于减法,将减法转换为加法,通过加上一个负数来实现。

5+-5=0,也就是 0000 0101 + x = 0000 0000, 手动算一下减法,x= 1111 1011。
在8位的系统中:

  • 正数 5 的二进制表示是 0000 0101。
  • 负数 -5 的表示过程是:
    1. 将 5 的二进制按位取反:1111 1010
    2. 加1:1111 1011 因此,-5 的补码表示是 1111 1011。
1
2
3
4
  00000101  (5)
+ 11111011 (-5)
------------
00000000 (0)

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)

  1. 正整数最大值

    32位的第一位存放符号位 0 表示正数
    0 1111111 11111111 11111111 11111111 可以计算成 2^31-1=2,147,483,647

  2. 负数最小值

    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

由 Hexo 驱动 & 主题 Keep