整数的大小端序

本文通过实例演示如何使用C++的union和指针来辨别计算机采用的小端序还是大端序,通过1982062410这个整数来演示内存存储的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在存储整数时,一般按字节为逻辑单位进行存储,有“小端序”和“大端序”之分。小端序(little-endian)
是指将表示整数的低位字节存储在内存地址的低位,高位字节存储在内存地址的高位。如果将整数 1982062410 存储至内存,由于

1982062410=([00000001][00101110][01110000][01010000])219820624_{10}=([00000001][00101110][01110000][01010000])_21982062410=([00000001][00101110][01110000][01010000])2

利用 C++中的 union 数据结构(或者指针)可以很容易确定计算机使用的是何种端序。

union {
 unsigned int bytes;
 unsigned char lowerByte;
} block;
int main(int argc, char *argv[])
{
 // 第一种方式:利用 union 的特性,将 block 的第一个成员赋值为 1,然后获取内存
 // 低位字节的值。如果是小端序,低位字节存储的值为 1;若为大端序,则值为 0。
 block.bytes = 1;
 cout << (block.lowerByte ? "little-endian" : "big-endian") << endl;
 // 第二种方式:利用指针直接获取低位字节的值。如果是小端序,低位字节存储的值为 1;
 // 若为大端序,则值为 0。
 unsigned int bytes = 1;
 cout << (*((char *)(&bytes)) ? "little-endian" : "big-endian") << endl;
 return 0;
}

强化练习:UVa594 One Little Two Little Three Little EndiansA。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值