数据是:如何在 ”内存“中的 ”存“ 和 ”取“ 的

每博一文案

人生就像一趟单程的列车,一旦出发就无法再回到最开始的地方而幸福。
其实就像你握在手中的水果硬糖。
虽然毫不起眼,没有华丽的包装,
却能给你最甜蜜的梦想,何必总迷恋着看似美好却不真实的远方,最值得珍惜的就在你的身旁,
珍惜所拥有的时光,不要把人生交给所谓的来日方长。—————————— 一禅心灵庙语

文章目录

  • 数据是:如何在 ”内存“中的 ”存“ 和 ”取“ 的
    • 每博一文案
    • 数据的 ” 存 “
      • 补码
      • 大小端的存放
    • 数据的 ” 取 “
      • 数据的截断
    • 最后

#include<stdio.h>
int main()
{unsigned int num = -10;printf("%d\n", num);printf("%u\n", num);
}

结果:


数据的 ” 存 “

  • 首先我们明白所有的数据,都是要存放到内存当中才可以被运行使用的
  • 而数据在内存中都是以**二进制 ( 1, 0 )**的方式存入的,所以数据在存入(加载)到内存时,就已经转化为了二进制了 ,就是说:数据存放的时候与数据自定义的是什么类型(int , unsigned) 无关, 而是与数据本身的类型(正,负)有关
  • 数据存放到内存当中是以二进制——>补码 的形式存入的

补码

  • 一个无符号位(+正数)的 原码=反码=补码
  • 一个负数就需要原码!=反码!=补码 ,需要一定的转化
  • 补码的产生方式:

为什么是补码:

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理

同时,加法和减法也可以统一处理,这样我们就只需要一个CPU加法器 ,大大减少了成本,此外,补码与原码相互转换,其运算过程是相同的 (补码转原码:同样可以1.取反,2.反码+1,得到原码),因此也不需要额外的硬件电路,减少了成本的消耗。


大小端的存放

  • CPU访存的基本单位是字节

    • 数据按照字节,是有:高权值位低权值位之分的

    • 内存按照字节是又:高地址低地址 之分的

  • 按照字节为单位低权值放在低地址处 ,就叫小端存储,为了方便记忆,我们可以记为**(小小小)**

    • 这里的第一个小的意思是:低权值,第二个小的意思是: 低地址处,第三个小的意思是:小端
  • 按照字节为单位 低权值 放在 高地址处 ,就叫大端存储


数据的 ” 取 “