百度2015年系统工程师笔试题:判断当前机器的大小端

简介: 百度2015年系统工程师笔试题:判断当前机器的大小端

一.题目呈现

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。

大端字节序:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;

小端字节序:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地
址中。

总结:大端就是正着保存的,小端就是倒着保存的。

二.三种解题方法

1.巧妙利用指针和强制转换

代码:

1. #include <stdio.h>
2. 
3. int main()
4. {
5.  int a = 1;
6.  char* p = (char*)&a;
7.  if (*p == 1)
8.    printf("小端\n");
9.  else
10.     printf("大端\n");
11.   return 0;
12. }

思路:这里使 a =1,就很方便,因为1的二进制是 :

    00000000  00000000  00000000  00000001

如果是大端那么1就在最后,如果是小端那么1就在最前面;

所以如果能够对 int a =1 的第一个字节进行解引用,判断结果是否等于1就行了

要想只解引用一个字节就需要强制转换成 char *  类型。

在我的电脑上的打印结果:


2.利用位段的特性

代码:

1. typedef struct S
2. {
3.  char  a : 2;  //这里的类型写成 char 或是 int 都行
4. }S;
5. 
6. int main()
7. {
8.  S s = { 1 };
9.  if (s.a == 1)
10.     printf("小端\n");
11.   else
12.     printf("大端\n");
13.   return 0;
14. }

关于这里为什么这么写代码,就需要了解位段的性质,简单来说,虽然这里的 a 有1个字节,也就是8个比特位,但因为 a 后面是2,所以只会用到8个比特位中的2个比特位;

然后将a 初始化成1,思路和方法1一致。


3.利用联合体的性质

代码:

1. typedef union U
2. {
3.  char a;
4.  int b;
5. }U;
6. 
7. int main()
8. {
9.  U u = { 1 };
10.   if (u.a == 1)
11.     printf("小端\n");
12.   else
13.     printf("大端\n");
14.   return 0;
15. }

这里的思路还是和方法1的一致,不同的是这里巧妙地用到了联合体的性质,但本质还是不变。


以上三种方法在同一台机器上的打印结果是相同的。


🐲🦖关于大小端的判断问题到此就结束了,若有错误或是建议,欢迎小伙伴们提出;👻🕊️

😄😁希望小伙伴们能够多多支持博主哦;🥰😆

🤩😍谢谢你的阅读。😃😆


目录
相关文章
|
3月前
|
Linux
百度搜索:蓝易云【Linux系统ps命令:查看正在运行的进程】
通过这些简洁的ps命令用法,你可以方便地查看Linux系统中正在运行的进程信息。
34 1
|
4月前
|
Ubuntu 安全 网络安全
百度搜索:蓝易云【Ubuntu系统SSH服务端配置】
现在,你已经成功在Ubuntu系统上配置了SSH服务端。这将允许其他计算机通过SSH协议连接到你的Ubuntu系统,并进行远程管理和操作。请注意,远程访问有安全风险,建议在生产环境中采取必要的安全措施来保护系统。
40 3
|
4月前
|
Linux
|
4月前
|
Ubuntu 网络安全
百度搜索:蓝易云【ubuntu系统ufw开放端口教程】
现在,你已经成功在Ubuntu系统中使用ufw开放了指定的端口。请确保只开放必要的端口,并注意网络安全。
98 3
|
4月前
|
存储 Ubuntu
百度搜索:蓝易云【在ubuntu系统下安装配置onedrive步骤】
现在,你已经成功在Ubuntu系统下安装和配置了OneDrive,可以使用该工具与OneDrive云端存储进行同步。
41 0
|
4月前
|
Ubuntu
百度搜索:蓝易云【Ubuntu系统apt添加第三方PPA源教程】
现在,你已经成功在Ubuntu系统中添加了第三方PPA源。系统将会从该源获取更新和软件包。请注意,添加第三方PPA源时要确保其来源可信,以免引入不安全的软件包。
40 5
|
4月前
|
Ubuntu
百度搜索:蓝易云【Ubuntu系统永久自动挂载硬盘或分区教程】
现在,Ubuntu系统将会在每次启动时自动挂载指定的硬盘或分区,并且挂载将保持永久有效。请确保配置 `fstab`文件时使用正确的UUID和挂载目录名,以免出现挂载错误。
57 7
|
4月前
|
Ubuntu 测试技术 Linux
百度搜索:蓝易云【Ubuntu系统打RT实时内核补丁教程】
现在,你已经成功在Ubuntu系统上打上RT实时内核补丁,并且系统将使用RT内核运行,提供更好的实时性能。请注意,内核编译和替换是一项复杂的操作,建议在实施前备份重要数据,并在测试环境中进行验证。
34 2
|
4月前
|
Ubuntu 网络协议
百度搜索:蓝易云【ubuntu系统如何设置静态IP地址?】
现在,你已经成功在Ubuntu系统中设置了静态IP地址。系统将使用指定的静态IP地址进行网络连接。
31 0
|
4月前
|
Ubuntu Shell
百度搜索:蓝易云【Ubuntu系统如何设置开机自启动shell脚本?】
现在,你的Shell脚本将会在Ubuntu系统开机时自动执行。请确保脚本中的逻辑是正确的,以免对系统造成不必要的影响。
33 0