大小端机器的判断-引发的思考
2012-06-28 08:42
204 查看
深入理解计算机系统中第二章节有一习题:编写过程is_little_endian,当在小端机器上编译和运行时返回1,在大端法机器上编译运行时则返回0。这个程序应该可以运行在任何机器上,无论机器的字长是多少?
其参考答案如下:
There are many ways to solve this problem. The basic idea is to create some multibyte datum with different
values for the most and least-significant bytes. We then read byte 0 and determine which byte it is.
In the following solution is to create an int with value 1. We then access its first byte and convert it to an
int. This byte will equal 0 on a big-endian machine and 1 on a little-endian machine.
[cpp] view
plaincopy
int is_little_endian(void)
/* MSB = 0, LSB = 1 */
int x = 1;
/* Return MSB when big-endian, LSB when little-endian*/
return (int) (* (char *) &x);
}
在没有看答案之前我编写的代码如下:
[cpp] view
plaincopy
int is_little_endian(void)
{
int i = 1;
char * p = (char *)&i;
if (p[0] == 0x01)
{
return 1;
}
else
{
return 0;
}
}
虽然我的思路是对了,但乱用if语句,是我这种新手最容易犯的问题,下面几行代码,显然可以用一句语句来概括。同时自己编写程序的时候,写完之后接着就是编译运行,看结果,结果对了,还有点沾沾自喜。没有想过有没有什么方法去优化代码,虽然这代码仅仅几行,但从二者之间对比,就知道差距的所在。
简洁就是美,看样子得加强内功才行,争取以后不要再犯这样的错误。
书看多了也没有什么用,更重要的是去实践,养成好的习惯,如编译代码之间先检查代码有没有相关的拼写错误和语法错误;其次看有没有更好的方法去实现相应的功能;怎么样才能使自己的简洁又易懂。
转自:http://blog.csdn.net/glose/article/details/6103113#
其参考答案如下:
There are many ways to solve this problem. The basic idea is to create some multibyte datum with different
values for the most and least-significant bytes. We then read byte 0 and determine which byte it is.
In the following solution is to create an int with value 1. We then access its first byte and convert it to an
int. This byte will equal 0 on a big-endian machine and 1 on a little-endian machine.
[cpp] view
plaincopy
int is_little_endian(void)
/* MSB = 0, LSB = 1 */
int x = 1;
/* Return MSB when big-endian, LSB when little-endian*/
return (int) (* (char *) &x);
}
在没有看答案之前我编写的代码如下:
[cpp] view
plaincopy
int is_little_endian(void)
{
int i = 1;
char * p = (char *)&i;
if (p[0] == 0x01)
{
return 1;
}
else
{
return 0;
}
}
虽然我的思路是对了,但乱用if语句,是我这种新手最容易犯的问题,下面几行代码,显然可以用一句语句来概括。同时自己编写程序的时候,写完之后接着就是编译运行,看结果,结果对了,还有点沾沾自喜。没有想过有没有什么方法去优化代码,虽然这代码仅仅几行,但从二者之间对比,就知道差距的所在。
简洁就是美,看样子得加强内功才行,争取以后不要再犯这样的错误。
书看多了也没有什么用,更重要的是去实践,养成好的习惯,如编译代码之间先检查代码有没有相关的拼写错误和语法错误;其次看有没有更好的方法去实现相应的功能;怎么样才能使自己的简洁又易懂。
转自:http://blog.csdn.net/glose/article/details/6103113#
相关文章推荐
- 大小端机器的判断-引发的思考
- linux简单的TCP与UDP的socket程序以及机器大小端的判断程序
- 写一个函数:判断当前使用的机器是大端还是小端
- c语言复习之判断机器的大小端存储
- 电脑大小端问题以及如何判断当前机器是大端还是小端
- 题目:如何判断一个机器是大端还是小端
- 判断机器大小端的两种实现方式
- 大小端以及如何判断当前的机器为大端小端
- [互联网面试笔试汇总C/C++-13] 写一个程序来判断机器的大小端-微策略
- 什么是大端字节序?什么是小端字节序?如何用共用体判断机器的大小端?
- 判断机器大小端的两种实现方法
- 用联合体判断机器是大端字节序还是小端字节序
- 判断机器的大小端
- 如何判断机器是大端还是小端
- c语言判断机器大小端
- 判断机器的大小端常用的程序
- 判断机器是用大端还是用小端方式来表示字节序列
- 判断机器的大小端 && 和位数
- 如何判断机器CPU是大端模式还是小端模式
- 判断机器大小端的C语言实现