整数编码
计算机存储的数据的Bit(位)与Byte(字节)
Bit:位、小b、最小单位
Byte:字节、大B、1Byte=8bit
你家的网络带宽就是用bit计算的
bit
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|
0-7为:一个Byte
1个bit只能存储2个信息:0、1
1个byte能存储:2^8个信息:[-128,127] or [0,255]
2个byte、4个byte、8个byte。 没有3byte
数据存储位置:寄存器、内存、磁盘等
计算机存储单位:
中文单位 | 中文简称 | 英文单位 | 英文简称 | 进率(Byte=1) |
---|---|---|---|---|
位 | 位 | bit | b | 0.125 1/8 B |
字节 | 字节 | Byte | B | 1 |
千字节 | 千字节 | KiloByte | KB | 2^10 |
兆字节 | 兆 | MegaByte | MB | 2^20 |
吉字节 | 吉 | GigaByte | GB | 2^30 |
太字节 | 太 | TeraByte | TB | 2^40 |
拍字节 | 拍 | PetaByte | PB | 2^50 |
艾字节 | 艾 | ExaByte | EB | 2^60 |
泽字节 | 泽 | ZettaByte | ZB | 2^70 |
尧字节 | 尧 | YottaByte | YB | 2^80 |
千亿亿字节 | 千亿亿字节 | Brontbyte | BB | 2^90 |
你家的磁盘1KB就是1000B,而计算机科学中的1KB就是1024B
整数的正负表示
有符号数:最高位做符号位这种表示的正整数叫做有符号数(有正负之分);
最高位叫做符号位,1表示负数,0表示正数
如果用1个字节来表示整数,那么:
10110110:负数
01001011:正数
无符号数:无负数,表示0和正整数,最高无需表示正负,参与数值的计算。
一个字节的2整数:
有符号:[-128,127]
无符号:[0,255]
整数的编码:原码
整数是按照二进制存储的,二进制需要进行特定的编码规则存储:原码、反码、补码
原码:在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。
以一个字节作为整数的存储长度位例子:
1:00000001
-1:10000001
那
么
1
−
1
=
1
+
(
−
1
)
=
00000001
+
10000000
=
10000010
=
−
2
那么1-1=1+(-1)=00000001+10000000=10000010=-2
那么1−1=1+(−1)=00000001+10000000=10000010=−2
错误,符号位无法参加计算
整数的编码:反码
反码:正整数的反码就是其本身,而负整数的反码可以通过对其绝对值逐位求反来求得。
以一个字节作为整数的存储长度为列子:
1:00000001
-1:11111110
那
么
1
−
1
=
1
+
(
−
1
)
=
00000001
+
11111110
=
11111111
=
−
0
那么1-1=1+(-1)=00000001+11111110=11111111=-0
那么1−1=1+(−1)=00000001+11111110=11111111=−0
反码的问题出现在(+0)和(-0)上,因为在人们的计算概念中零是没有正负之分的。
整数的编码:补码
补码:正数的补码为它本身,负数的补码就是它的绝对值求反加1,0的补码是0
计算机采用补码存储整数
0的补码:0
1的补码:00000001
127的补码:01111111
-128:10000000
补码的好处是:0是唯一的,符号位可以参与计算:
1:00000001
-1:11111111
1-1=00000001+11111111=00000000=0
一个字节的补码扩充到2个字节,4个字节:
正数:0扩充
负数:1扩充
用最高位的符号位去扩充