C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

亚星游戏官网-yaxin222  新兵

注册:2017-10-24
发表于 2020-11-9 16:21:00 |显示全部楼层

1.什么是大端 / 小端?
2.为什么会有大小端之分呢?
3.怎么判断当前机器的字节序?

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

为什么会有大小端之分呢?
因为在计算机系统中,大家以字节为存储单元,每个地址单元都对应着一个字节,一个字节为8bit。而在C语言中,不仅仅是一个字节来存储一个数据,除了一个字节的char,还有两个字节的short,四个字节的int等等(看具体编译器)。另外,对于位数大于8位的处理器,例如32位的处理器,由于寄存器的宽度大于一个字节,那么就有如何将多个字节进行排布的问题,于是就出现了大小端的问题。下面举个栗子:(32位机)
亚星游戏官网-yaxin222

怎么测试我的电脑是小端模式还是大端模式呢?
1.将int 48存起来,然后取得其地址,再将这个地址转为char* 这时候,如果是小端存储,那么char*指针就指向48;
48对应的ASCII码为字符‘0’;

[color=rgb(0, 0, 136) !important]void judge_bigend_littleend1(){    [color=rgb(0, 0, 136) !important]int i = [color=rgb(0, 102, 102) !important]48;    [color=rgb(0, 0, 136) !important]int* p = &i;    [color=rgb(0, 0, 136) !important]char c = [color=rgb(0, 102, 102) !important]0;    c = *(([color=rgb(0, 0, 136) !important]char*)p);    [color=rgb(0, 0, 136) !important]if (c == [color=rgb(0, 153, 0) !important]'0')        printf([color=rgb(0, 153, 0) !important]"小端\n");    [color=rgb(0, 0, 136) !important]else        printf([color=rgb(0, 153, 0) !important]"大端\n");}

举报本楼

您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-9-22 16:43 , Processed in 0.102829 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图