IEEE754浮点数的表示方法:N = (-1)^s x m x 2^e
,其中s为符号位,m是尾数位,e是指数位。code
种类 | 符号位 | 指数位 | 尾数位 |
---|---|---|---|
float | 第31位(占1bit) | 第30-23位(占8bit) | 第22-0位(占23bit) |
double | 第63位(占1bit) | 第62-52位(占11bit) | 第51-0位(占52bit) |
对于单精度浮点数(float)来讲,符号位一位,指数位8位,尾数23位。指数可以表示的指数范围为-128~127,尾数为23位。内存
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,因为它是不变的,故不能对精度形成影响。it
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。(指数二进制转换为十进制)table
具体计算公式N = (-1)^s x m x 2^e
,以float为栗子,但s=0,m=23,e=8时:class
+1.1111111111111111111111 x 2^127(小数点后面23个1,因为尾数的范围1~2,其最高位总为1,故只需存取小数部分,因此小数为是23位1),约等于2 x 2^127=3.4 x 10^38。负数亦然。二进制
long表示的是一个整型的数据,在不一样系统或语言定义可能不一样,在内存32位或64位,即表示的是一个有32/64位二进制数表示的一个整数,最大为 2^63-1.float
但double不同,表示的是浮点数,以EEE754浮点数表示方法为:N = (-1)^s x m x 2^e
,其范围和精度是由其指数和位数决定的。所说的32位或64位是指该浮点数的符号位+指数位+尾数位
.方法
二者在表示形式就不同,而不能简单地根据数据所占位数去比较它们的大小。数据
补充:理解32位系统和64位系统tab
32位系统CPU一次可处理32位数据,即一次处理4个字节;64位系统CPU一次可处理64位数据,即一次处理8个字节。
x86与x86-64有什么区别呢?x86指的是通常意义上的32位Intel处理器;而x86_64 则是通常意义上的64位Intel处理器。