1.整数的存储:
整数通常使用二进制补码形式存储。
对于正数,其 原码 反码 补码 一致;
对于负数,其补码是其的二进制取反后加1。
原反补码:
- 原码:二进制表示,其中负数会将二进制最高位作为符号位改为1(表示负数)。
- 反码:在原码所有位取反 0->1 , 1->0 。
- 补码:在反码上,加1。
(补码的设计简化了计算机的加法运算,并使得符号位能够参与数值的计算,从而提高了计算机的运算效率和灵活性)。
例如:
1. 正数5的二进制表示为 00000101
,原码,反码,补码一致,这就是它在内存中的存储形式。
2. -5的二进制表示为 10000101
,取反,符号位不变,其他取反,后得到 11111010
,再加1得到 11111011
,这就是-5在内存中的存储形式。
- 原码 1000 0101
- 反码 1111 1010
- 补码 1111 1011
整数的大小和范围取决于分配给它们的位数。例如,一个8位整数可以表示的范围是-128到127,而一个32位整数可以表示的范围则要大得多。
2.浮点数的存储:
浮点数在内存中通常使用IEEE 754标准来存储。这个标准定义了浮点数的格式:包括符号位、指数和尾数(或称为有效数字)。
IEEE 754标准下的浮点数通常由三个部分组成:
- 符号位:表示浮点数的正负。
- 指数位:用于表示浮点数的指数部分,通常是偏移形式,这样指数可以是正数或负数。
- 尾数位:表示浮点数的有效数字或尾数。
- 例如,一个单精度浮点数(float)通常占用32位,其中1位用于符号,8位用于指数,23位用于尾数。而双精度浮点数(double)则占用64位,其中1位用于符号,11位用于指数,52位用于尾数。
以 3.5 作为例子:
3.5 的二进制是 11.1 (因为 0.5=2 的 -1次方)
将他变成科学计数法表示: (-1)^0 × 1.11 × 2^1
解释上式:
- -1的0次方表示正负
- 2的一次方由11.1小数点左移一位得到
分成三个部分:1. 符号位S(占1个字节)--- 0
2.指数位E(占8个字节)---- 1
3.尾数位M(占23个字节)---- 1.11
在内存中存储时:1.指数位需要加上127,等于1+127=128转化为二进制位10000000
2.尾数位只存小数点后面的位,就是.11然后剩下的位补0
所以3.5在内存中存储是如图
为 0100 0000 0110 0000 0000
转换为16进制是 40 60 00 00
我们在 VS 里面调试看一下是否正确
因为是小端存放,所以是倒数的
通过这种存储方式,计算机能够精确地表示和运算浮点数,尽管由于精度限制和舍入误差,有时可能会产生一些微小的偏差。
浮点数在科学计算、金融建模、图形处理等领域中广泛应用,因为它们能够表示更大范围的数值,并且具有一定的精度。然而,在进行浮点数运算时,需要注意精度损失和舍入错误的问题。
3.什么是小端,什么是大端
大端字节存储:
把一个数据的低字节的内容储存在高地址处,把高位字节的内容存储到低地址处。
特点:大端模式在人类阅读数字时比较直观,因为数字的左边是最高位,右边是最低位,这与人们从左到右的阅读习惯相符。
小端字节存储:
把一个数据的低字节的内容储存在低地址处,把高位字节的内容存储到高地址处。
特点:小端模式在某些情况下可以简化硬件设计,因为当数值逐渐增大时,地址也递增,这使得计算机的内部操作更加简单。然而,对于人类来说,这种存储方式可能不那么直观。
这期介绍就到这里!可以点点赞关注,你们的支持是我继续的动力!