题目要求如题所示:
将一个字符按bit位逆序,例如一个字节是0x11,将其逆序后就变成0x88。
下面是四种解法,其中最后一种效率最高,是从《Hacker’s Delight》这本书中学来的。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#define
exchange(x,y) { (x) ^= (y); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(y)
^=
(x); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(x)
^=
(y); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unsigned
char
fun1(unsigned
char
c)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int
i;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
union
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
c;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
struct
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
bit0:
1
;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
bit1:
1
;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
将一个字符按bit位逆序,例如一个字节是0x11,将其逆序后就变成0x88。
下面是四种解法,其中最后一种效率最高,是从《Hacker’s Delight》这本书中学来的。
第一种:
看似创新,其实最笨的做法。
使用bit类型,代码不够简洁,执行效率较低,并且扩展不易(例如对int型进行逆序时)。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#define
exchange(x,y) { (x) ^= (y); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(y)
^=
(x); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(x)
^=
(y); /
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unsigned
char
fun1(unsigned
char
c)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
int
i;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
union
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
c;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
struct
…
{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
bit0:
1
;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
char
bit1:
1
;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
unsigned
版权声明:本文为jakee304原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。