主页

浮点数

2020-03-27
计算机组成原理

浮点数 #

  • 浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示的方法。

32位浮点数 #

  • 数的量级在1x2-126至1.11…x2127之间,大概就是1.19x10-38至3.40x1038之间,如果有一个数为1040,就不能使用float来存了。

0 | 100 0001 0 | 011 0110 0000 0000 0000 0000 #

  • 第一部分表示符号位,0为正数,1为负数
  • 第二部分共8位,表示阶码(指数),需要减去127
  • 第三部分(23位)表示尾数(小数点后面的数)。
  • 0表示为正数,100 0001 0减127为3,剩余23位放在1.的后面,即1.011011,所以结果为1.011011x23

64位浮点数 #

  • 阶码宽度为11位,
  • 位数宽度为52位
  • 数的量级在1x2-1022 至 (2-2-52)x21023之间,大概就是10-308至10308

程序计数器 #

  • PC总是存储将要执行的下一条指令的地址

编码

2020-03-12
其他

  • Unicode是一个符号集,只规定了符号的二进制代码,如U+0041表示英语大写字母AU+4E25表示汉字
  • Unicode没有规定二进制代码如何去存储。如的Unicode是16进制4E25,转化为二进制就是101 1110 0010 0101(共15位),如果存储的话这个符号至少需要两个字节;而A的Unicode是16进制0041,转化成二进制是100 0001(7位),如果存储的话这个符号至少需要一个字节。
  • 计算机不知道到底是两个字节表示一个符号还是一个字节表示一个符号。如果统一用2个字节存储,会导致浪费,因为英文字母前面就会有一个字节的0。

  • UTF-8规定了二进制代码的存储方式,它可以使用1~4个字节表示一个字符:
Unicode(HEX) UTF-8(BIN)
0000~007F 0XXXXXXX
0080~07FF 110XXXXX 10XXXXXX
0800~FFFF 1110XXXX 10XXXXXX 10XXXXXX
10000~10FFFF 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
  • Unicode二进制位数在0~7位之间,UTF-8用一个字节表示,字节的第一位设为0;然后把Unicode的二进制从后向前填入到UTF-8的X里边去(填到UTF-8中也是按照从后向前的顺序,如果填完了发现还有X,就补零)。如A的Unicode是0041,用UTF-8表示就是0100 0001

  • Unicode二进制位数在8~11位之间,UTF-8用两个字节表示,第一个字节的前三位设为110;第二个字节前两位设置为10,然后把Unicode的二进制从后向前填入到UTF-8的X里边去(填到UTF-8中也是按照从后向前的顺序,如果填完了发现还有X,就补零)。

  • 12位及以上也是这个逻辑。


  • UTF-8编码中如果一个字节是以0开头,就表示接下来的一个字节表示一个字符;
  • 如果一个字节是以110开头,表示接下来的两个字节表示一个字符;
  • 如果一个字节是以1110开头,就表示接下来的三个字节表示一个字符;
  • 如果一个字节是以11110开头,就表示接下来的四个字节表示一个字符;
  • 如果一个字符是以10开头,说明你看错了,你得往前找一个或几个字节。

参考链接: 阮一峰的网络日志