当前位置:   article > 正文

数据存储之大小端存储模式

大小端存储模式

我们知道变量的创建是要在内存中开辟空间,而空间的大小是根据不同的类型来决定的。那么数据在所开辟的内存中到底是如何存储的呢?

先来看一下下面的整数在内存中是怎样存储的

 在计算机中整数有三种表达方式,即原码、反码和补码。三种表示方法均有符号位和数值位两部分组成。

符号位:都是用0表示“正”,用1表示“负”。

数值位:正整数三种表达方式都是一样的(正数的原、反、补码都相同,),负整数则各不相同。

原码:直接将二进制按照正负数的形式翻译成二进制就可以。

反码:将原码的符号位(第一位)不变,其他位依次按位取反就可以得到了。

补码:反码+1就得到补码。

对于整形数据存放内存中其实存放的是补码。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域 统一处理; 同时,加法和减法也可以统一处理(CPU只有加法器)。

来看看在内存中的存储(十六进制显示)。

 

我们可以看到对于a和b分别存储的是补码。但是我们发现顺序有点不对劲,这里就涉及了大小端存储问题。 

什么是大小端:

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地 址中;

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。

 

 怎样才能知道我们用的机器是那种存储模式呢?

看以下代码

  1. #include <stdio.h>
  2. int check_sys()
  3. {
  4. int i = 1;
  5. return (char)i;
  6. }
  7. int main()
  8. {
  9. int ret = check_sys();
  10. if (ret == 1)
  11. {
  12. printf("小端\n");
  13. }
  14. else
  15. {
  16. printf("大端\n");
  17. }
  18. return 0;
  19. }

 

  更多内容请移步个人博客:乌托邦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/56680
推荐阅读
相关标签
  

闽ICP备14008679号