大小端机器的判断-引发的思考

深入理解计算机系统中第二章节有一习题:编写过程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 plain copy
  1. int is_little_endian(void)  
  2.   
  3.   /* MSB = 0, LSB = 1 */  
  4.     int x = 1;  
  5.   /* Return MSB when big-endian, LSB when little-endian*/  
  6.     return (int) (* (char *) &x);  
  7. }  

在没有看答案之前我编写的代码如下:

[cpp]  view plain copy
  1. int is_little_endian(void)  
  2. {  
  3.         int i = 1;  
  4.         char * p = (char *)&i;  
  5.         if (p[0] == 0x01)  
  6.         {  
  7.                 return 1;  
  8.         }  
  9.         else  
  10.         {  
  11.                 return 0;  
  12.         }  
  13. }  

虽然我的思路是对了,但乱用if语句,是我这种新手最容易犯的问题,下面几行代码,显然可以用一句语句来概括。同时自己编写程序的时候,写完之后接着就是编译运行,看结果,结果对了,还有点沾沾自喜。没有想过有没有什么方法去优化代码,虽然这代码仅仅几行,但从二者之间对比,就知道差距的所在。

简洁就是美,看样子得加强内功才行,争取以后不要再犯这样的错误。

书看多了也没有什么用,更重要的是去实践,养成好的习惯,如编译代码之间先检查代码有没有相关的拼写错误和语法错误;其次看有没有更好的方法去实现相应的功能;怎么样才能使自己的简洁又易懂。


转自:http://blog.csdn.net/glose/article/details/6103113#

你可能感兴趣的:(大小端机器的判断-引发的思考)