uva 594 One Little, Two Little, Three Little Endians。

题目背景

计算机在内存中存储整数时,一般按字节为逻辑单位进行存储,有“小端序”和“大端序”之分。

 

小端序(little-endian)是指将表示整数的低位字节存储在内存地址的低位,高位字节存储在内存地址的高位。

 

而使用大端序(big-endian)方式存储时,存储顺序正好相反。

 

题目描述

对于一个存储在小(大)端机上的整数,该整数在大(小)端机上会被系统识别为哪个整数?

 

输入格式

输入文件共若干行,每行一个整数 xx。

 

输出格式

对于每个输入的整数 xx,在输出文件中打印一行。

 

该行包含输入的整数 xx,后跟“ converts to ”(不含引号),后跟转换后的整数。

 

说明/提示

【样例解释】

 

123456789_{10}=([00000111][01011011][11001101][00010101])_2123456789 

10

​ 

 =([00000111][01011011][11001101][00010101]) 

2

​ 

 。

 

使用小端机存储时,如果内存存储起始地址为 0x5200x520,则从低位地址到高位地址存储的内容依次为

 

[00010101]_{0x520}[11001101]_{0x521}[01011011]_{0x522}[00000111]_{0x523}[00010101] 

0x520

​ 

 [11001101] 

0x521

​ 

 [01011011] 

0x522

​ 

 [00000111] 

0x523

​ 

 ,

 

而这段内存在大端机中将被识别为

 

([00010101][11001101][01011011][00000111])_2=365779719_{10}([00010101][11001101][01011011][00000111]) 

2

​ 

 =365779719 

10

​ 

 。

 

【数据范围】

 

对于 100\%100% 的测试点,有 -2147483648 \leq x \leq 2147483647−2147483648≤x≤2147483647。

 

输入输出样例

输入 #1复制

123456789

-123456789

1

16777216

20034556

输出 #1复制

123456789 converts to 365779719

-123456789 converts to -349002504

1 converts to 16777216

16777216 converts to 1

20034556 converts to -55365375

#include <bits/stdc++.h> // 引入C++标准库头文件

using namespace std; // 使用C++标准库的命名空间

 

int main() // 主函数

{

    int n, reverse; // 定义两个整型变量n和reverse

    while(~scanf("%d", &n)) { // 循环读取输入的整数n,直到输入结束

        reverse = n; // 将输入的整数n赋值给reverse

        char *bits = (char *)&reverse; // 将reverse的地址转换为字符指针类型,并赋值给bits

        swap(bits[0], bits[3]); // 交换bits的第0个和第3个字节

        swap(bits[1], bits[2]); // 交换bits的第1个和第2个字节

 

        printf("%d converts to %d", n, reverse); // 输出转换前后的整数

    }

 

    return 0; // 程序正常结束,返回0

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值