大端存储和小端存储_教你用简单的程序判断你的电脑是大端还是小端

629e417e14167f812ad2dbe133fc8648.png
码字不易,对你有帮助 点赞 /转发↪️/关注 支持一下作者
微信搜公众号: 不会编程的程序圆 看更多干货,获取第一时间更新

如何用程序判断自己的机器是大端还是小端?

通常情况下,我们的计算机都是小端存储模式。

小端:数字的低位存储到内存的低地址上。
大端:数字的低位存储到内存的高地址上。

我们在 VS 中创建一个临时变脸

 int a = 0x11223344;// 十六进制数

然后打开调试器,看到变量 a 在内存中是这样存储的:

 0x0133FC50  44 33 22 11

对于 Vs 调试中内存窗口的这行信息应该如何理解呢?它就表示:

efd5e6187021c24208c3b968d478319c.png

十六进制数每两位表示一个字节,地址也是十六进制数;int 类型在 32 位机器上大小为 4 个字节。

如何理解十六进制数每两位表示一个字节?

十六进制数每一位的取值范围是 0 ~ 15,表示 16 种不同可能,对应 4 个二进制位(0000 ~ 1111),所以每一位十六进制可以表示 4 个二进制位,那么两个十六进制位就表示 8 个二进制位,也就是 1 个字节。

可以看到,在我的机器上,低位 44 存储在 低地址(0x0133FC50)上,所以我的机器是 小端存储模式。

如果是大端存储模式,变量 a 在内存中的存储应该如下图所示:

47181d2150f944c0dff95651bd8bd560.png

现在,让我们用程序来验证一下我们的机器到底是大端还是小端。

方法一

 #include<stdio.h>
 ​
 int main(void) {
 ​
     int a = 0x11223344;
     int* pi = &a;
     char* pc = (char*)pi;//指针强转
 ​
     printf("%xn", *pc);//输出 44 ,得到证实
 ​
     return 0;
 }

方法二

 #include<stdio.h>
 ​
 typedef union {
     int a;
     char ch[sizeof(int)];
 }BOS;//big or small
 ​
 int main(void) {
 ​
     BOS bos;
     bos.a = 0x11223344;
 ​
     printf("%x", (unsigned int)bos.ch[0]);//输出 44
 ​
     return 0;
 }

如果本文你有地方没有看懂,推荐阅读以下文章,可以帮助你理解

  • 一文看懂枚举&结构&联合

推荐阅读:

编程反思录:给你三个必须要学C语言的理由!​zhuanlan.zhihu.com
c689a217827ad91d9dba8e6984b5b04e.png

以上就是本次的内容。

如果文章有错误欢迎指正和补充,感谢!

最后,如果你还有什么问题或者想知道到的,可以 在评论区/私信 告诉我呦,我可以在后面的文章加上你的真知灼见 。

关注我,看更多干货!

我是程序圆,我们下次再见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值