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

深入理解计算机系统中第二章节有一习题:编写过程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#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值