大小端字节序问题及习题分析
来源:互联网 发布:傲剑屠龙刀数据大全 编辑:程序博客网 时间:2024/06/03 17:18
在看大小端问题之前,我们先来看看什么是大小端字节序
大端字节序:高位低地址,低位高地址
小端字节序:低位低地址,高位高地址
那么我们知道大小端字节序能干什么呢?
我们可以知道当前机器的存储方式,我们来写个代码测试一下 (注:在vs2012下编译的)
#include<stdio.h>
#include<stdlib.h>
int check()
{
int i = 1; //这里取1,是因为1的二进制比较简单,如果我们选取一个比较大的数,我们在判断的时候还要计算一下高地址或者低地址放的是什么 ,当然也没必要这么坑自己
int *p = &i; //取i的首地址给指针P,因为i是整型的,所以我们给个整形指针去存放i的首地址
if(*p==1) //根据上面画的图给出判断
{
return 1
}
else if(*p==0)
{
return 0;
}
else
{
return -1;
}
}
int main()
{
int ret = 0;
ret = check(); // 让ret去接受check()函数的返回值
if(ret==1)
{
printf("大端字节序");
}
if(ret==0)
{
printf("小端字节序");
}
if(ret==-1)
{
printf("ERROR");
}
printf("\n");
system ("pause");
return 0;
}
然后我们来看下我们的运行结果:
当然,知道这个你还可以解答c/c++的面试题哦, 我们来看一下这样一道面试题
假设在一个32位机little endian 机器上运行以下程序,结果为?
#include<stdio.h>
int main()
{
long long a = 1 ,b = 2,c = 3;
printf("%d,%d,%d",a,b,c);
return 0;
}
这是一道填空题,代码也很短,我们来分析一下
首先,题目明确规定是在小端字节序机器上的,那么我们需要注意想想小端是如果存储的,其次 a,b,c都是long long类型的变量,占8字节,而却以%d的形式输出的,%d是以十进制输出,也就是说输出的是个int型,占4字节,那这里我们就需要注意了,最后printf函数的参数是从右向左入栈的,压栈的时候应该是先压c,在压b,最后压a;
明确了这些之后,我们就可以得出结论了,那么,在画个图看看
- 大小端字节序问题及习题分析
- 大小端,字节序问题
- 大小端字节序问题
- 大小端字节序问题
- 大小端、字节序问题
- 字节序问题--大小端问题
- 大小字节序问题
- 关于网络字节序--大小端分析
- 大小端及网络字节序
- 主机字节序(大小端判断)及网络字节序
- 主机字节序(大小端判断)及网络字节序
- 字节序网络序大小端问题
- 字节序问题——大小端
- 大小端、网络字节序问题
- 大小端、网络字节序问题
- 大小端、网络字节序问题
- 大小端、网络字节序问题
- 大小端、网络字节序问题
- R中的控制流
- AngularJS: controllers shouldn’t try to do too much
- 洛谷 P2055 [ZJOI2009] 假期的宿舍
- (28)迭代语句
- 11111 lin_stack
- 大小端字节序问题及习题分析
- link_queue
- [51nod 1667]概率好题
- 练习赛题目 HDU1062Text Reverse
- 宏定义的优缺点
- HZNU2016年秋季学期程序设计基础第一次考试题解
- 九九乘法表
- 初学链表
- 帕斯卡三角形—Pascal's Triangle II