定/浮点数的表示是为了解决小数点问题,而定点数的编码则是为了解决正负号的问题。今天来记录一下定点和浮点数的表示。
定点小数用来表示浮点数的尾数,定点整数用来表示浮点数的阶,即指数,
需要注意的是,定点小数用原码来表示,定点整数用移码来表示,(带符号整数是用补码来表示的,原因在另一文章中有记录。)
我们从浮点数开始说起:
此图为截取慕课网文档素材,32位的浮点数编码表示,第0位数为数符,即符号位,第1~8位是8位移码,用来表示阶码,而剩下的9~31位为24位二进制原码小数表示的尾数,由于规格化尾数的小数点后的第一位总是1,所以可以用23个数位表示24位尾数。
可以通过计算来算出其在正数的范围,最大正数即为0.111...1*2^(11111111)=(1-2^(-24))*2^127,而最小正数则为0.1000...0*2^(00000000)=1/2 *2^(-128),同时,由于原码是对称的,故其表示范围也关于原点对称。
其中,浮点数的规格化表示为+/-1.xxxxxxxxxxxxxx*r^e,IEEE 754标准规定,小数点前总是1,而阶码的全0和全1用来表示特殊值,则规格化阶码的范围为00000001~11111110,而偏移量为127(single)和1023(double),故其范围为(-126~127)
这就是目前我所了解到的浮点数的编码表示。