八个字节整数表示的数值范围:
八个字节共64位,最左边位符号位占1bit,后面数字位占63bit,可表示的数值范围,1111...1111(1后面63个1)~0111...1111(0后面63个1),63个1是多大的数呢?
换算成十进制就是(2^62+2^61+...+2^1+2^0),这样表示太过麻烦,我们可以换一种方式考虑。
对于二进制来说,有以下规律:
10 -1=1;
100-11=1;
1000-111=1;
...
以此类推:1000...0000(1后面63个0)-1111...1111 (63个1)=1;
因此0111...1111(0后面63个1)就可以表示为1000...0000(1后面63个0)-1,即:
1×2^63+0×2^62+...+0×2^1+0×2^0-1=2^63-1,这就是八个字节整数能表示的最大值;
同理可得1111...1111(1后面63个1)= - (2^63-1)。
需要注意的一点是,由于0000...0000(0后面63个0)与1000...0000(1后面63个0)都数值都为0,一个为﹢0一个为-0,参考一个字节取值范围的规定,﹢0表示真正的0,-0表示的值=最小值-1,即为;
- (2^63-1)-1= - 2^63,这就是八个字节整数能表示的最小值;
四个字节浮点数表示的数值范围:
单精度浮点数 float:32 位,符号位 S 占 1 bit,指数 E 占 8 bit,尾数 M 占 23 bit
浮点数格式为:N=(-1)^S*M*R^E
S:符号位,取值 0 或 1,决定一个数字的符号,0 表示正,1 表示负
M:尾数,用小数表示,例如 1.345 * 10^0,1.345 就是尾数
R:基数,表示十进制数 R 就是 10,表示二进制数 R 就是 2
E:指数,用整数表示,例如 10^-1,-1 即是指数
由于指数E有正负,其所占的8bit最左边也为符号位,则E的范围为111111111~011111111即
为-128~127;尾数M最大值为小数点后23个1,约等于1,所以四个字节浮点数表示的最大值为
1×2^127,最小值为-2^127。
总结:
四个字节浮点数表示的数值范围:-2^127~2^127;
八个字节整数表示的数值范围:- 2^63~2^63-1;
由此可见,四个字节浮点数表示的数值范围要比八个字节整数表示的数值范围大的多。