
内存中整数的存储方式整数在内存中的存储通常采用二进制补码形式。补码表示法能够统一处理正数和负数的加减运算简化硬件设计。以32位整数为例最高位为符号位0表示正数1表示负数其余31位表示数值。正数的补码与原码相同负数的补码是其绝对值的二进制取反后加1。例如十进制数5的32位存储形式 00000000 00000000 00000000 00000101十进制数-5的32位存储形式 11111111 11111111 11111111 11111011对于正数,他的原码,反码,补码相同,对于负数,他的原码,补码,反码不同浮点数的IEEE 754标准在计算机中,整数和浮点数他们的存储方式是不同的现代计算机普遍采用IEEE 754标准存储浮点数。32位单精度浮点数包含三个部分 1位符号位S8位指数位E23位尾数位M。浮点数的值计算公式为 (-1)^S × 1.M × 2^(E-127)例如十进制数12.375的存储过程转换为二进制1100.011规范化1.100011 × 2^3计算各部分符号位S0正数指数E312713010000010尾数M100011补零到23位最终32位表示 0 10000010 10001100000000000000000精度与舍入问题浮点数存在精度限制可能导致舍入误差。例如0.1在二进制中无法精确表示会形成无限循环小数。进行多次浮点运算时误差可能累积。十进制数0.1的近似表示 0 01111011 10011001100110011001101理解这些存储原理有助于编写更高效、可靠的数值计算程序并避免常见的精度问题和字节序问题。同时,我们知道,浮点数在计算机中是不能精确存储的,这就要求我们在做浮点数的比较时,可能会出错例如int a0.1; int b 0.2; int c 0.3;那么在计算机中,ab!c这是因为计算机在存储A和B的时候,无法做到精确存储,只能尽可能的找到一个精确地数来代替,当我们需要判等时,这里作者给读者提供一种思路,我们可以通过计算两数相减的绝对值,并设置一个精度,当绝对值满足精度时,认为两数相等,如if ( fbas(a b - c) 0.000001)printf(a b c);当两数之差小于0.000001时,我们认为两数相等.大小端存储差异计算机系统对多字节数据的存储有大小端之分。大端模式将高位字节存储在低地址小端模式将高位字节存储在高地址。例如32位整数0x12345678大端存储地址递增12 34 56 78小端存储地址递增78 56 34 12浮点数的特殊值处理IEEE 754标准定义了特殊值的表示零值指数和尾数全为0无穷大指数全1尾数全0NaN非数指数全1尾数非0这些特殊值使得浮点运算能够处理除以零等异常情况而不导致程序崩溃。