百度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的一致,不同的是这里巧妙地用到了联合体的性质,但本质还是不变。


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


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

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

🤩😍谢谢你的阅读。😃😆


目录
相关文章
|
4月前
|
存储 小程序 C语言
C语言数据的存储(内含百度笔试题)
C语言数据的存储(内含百度笔试题)
45 4
|
7月前
|
算法 大数据 程序员
|
SQL 网络协议 Java
5面收割字节35k offer,只因一份热乎的Alibaba内部32W字面试手册
Java的知识体系十分庞大,多且杂,这就使得我们不仅要掌握Java基本语言,还要掌握很多相关技术。这样就导致Java程序员的面试题范围极广,必须做好充分的面试准备。
|
小程序
百度2015年系统工程师笔试题
百度2015年系统工程师笔试题
|
Web App开发 前端开发 JavaScript
某银行前端一年半经验进字节面经
19 年毕业进入到某银行,年底转正,给的 offer 是前端开发,但是由于所在中心主要职责是数据方面的开发,只能边干前端边学习数据开发的知识,后期前端的内容越来越少,于是在有内推机会的情况下,工作之余复习加面试,成功拿下 offer,记录一下面试过程。
|
测试技术
字符串a和他许久未见面的同父异母的b(模拟)(思维)
字符串a和他许久未见面的同父异母的b(模拟)(思维)
82 0
|
机器学习/深度学习 缓存 架构师
十年技术进阶路,让我明白了三件要事(8000字长文)
8000字长文,大概花费您10分钟的阅读时间,我将以十年成长道路与八年写博经历分享与你,希望能给予各位读者或多或少的建议与提醒
308 1
十年技术进阶路,让我明白了三件要事(8000字长文)
|
存储 缓存 网络协议
前端面试基础网络问题(万字长文)
这篇文章你会了解到什么 • OSI七层协议和TCP/IP四层协议模型 • 什么是UDP协议 • 什么是TCP协议 • TCP连接过程 • TCP两次握手就可以完成,为撒需要三次了? • TCP断开连接过程 • 为什么 A 要进入 TIME-WAIT 状态,等待 2MSL 时间后才进入 CLOSED 状态? • ARQ协议(超时重传机制):停止等待ARQ协议、连续ARQ协议 • 滑动窗口协议 • 拥塞处理过程 • 拥塞算法
245 0
|
存储 小程序
|
存储 小程序 编译器
一道百度经典的笔试题-大小端的判断
一道百度经典的笔试题-大小端的判断
110 0
一道百度经典的笔试题-大小端的判断