整数在内存中的存储
整数的二进制以 原码 反码 补码 表示.
三种表示方法均有符号位和数值位两部分,符号位用 0 表示正,用 1 表示 负,而数值位最高位的一位是被当作符号位,剩余的都是数值位.
正整数的原 反 补码都相同
负整数的三种表示方法各不相同
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码.
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码.
补码:反码+1就得到补码
对于整型来说:数据存放内存就是补码.
例如: 8的存放
原码:00001000
反码:00001000
补码:00001000
-8的存放
原码:10001000
反码:11110111
补码:11111000
浮点数在内存中的存储
常见的浮点数 1.23 1E5等,浮点数家族包括:float double long double ( 它们的范围在float.h中定义)
它们的存储按照 IEEE754标准储存
V = (-1)^s * M * 2^E
(-1)^s 是符号位,当S = 0就是正数, 当S=1的时候就是负数
M 表示有效数字,M是大于等于1,小于2的
2E表示指数为位
例如 5.0 = 101.0 = 1.01 * 2^2
-5.0 = -101.0 = -1 * 1.01 * 2 ^ 2
由IEEE 754规定
32位的浮点数这样储存
64位的浮点数这样储存
注意 :
在对E存储的时候,要加上中间值127,然后表示成二进制码储存 而储存M的时候,尾数要去整数部分,然后补齐0到23位