交换一个整数二进制表示中的奇数位和偶数位

简介: 题目 原文: 写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第0位和第1位交换,第2位和第3位交换…) 解答 这道题目比较简单。分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可。

题目

原文:

写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第0位和第1位交换,第2位和第3位交换…)

解答

这道题目比较简单。分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可。

代码如下:

int swap_bits(int x){
    return ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555);
}

当然也可以采用更自然的方式来写这段代码:

int swap_bits1(int x){
    return ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1);
}

上面的代码思路和作用都是一样的,不过按照《Hacker’s delight》这本书里的说法, 第一种方法避免了在一个寄存器中生成两个大常量。如果计算机没有与非指令, 将导致第二种方法多使用1个指令。总结之,就是第一种方法更好。

相关文章
|
4月前
|
Java
链表中奇数位和偶数位的置换
链表中奇数位和偶数位的置换
|
5月前
|
C语言
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
38 0
|
3月前
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
|
3月前
|
C语言
[C语言][题]获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
[C语言][题]获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
25 0
|
3月前
|
算法 Python
计算32位二进制整数中1的个数(包括负数补码)
计算32位二进制整数中1的个数(包括负数补码)
28 0
|
4月前
打印2进制位数的奇数位和偶数位
打印2进制位数的奇数位和偶数位
|
9月前
打印整数二进制的奇数位和偶数位
打印整数二进制的奇数位和偶数位
27 0
|
9月前
C语音:打印整数二进制的奇数位和偶数位
总体思路: (一). 输入数据 (二). 打印奇数位: 使用 for循环 循环产生 1~32 之间的偶数, 使用 移位操作符 移动偶数位,移动后就是奇数位, 这时再 按位与1 取出当前位, 进行打印。打印完奇数后进行 换行
|
10月前
|
算法 Python
十进制与二进制的互换
十进制与二进制的互换
96 0
|
算法
C生万物 | 使用宏将一个整数的二进制位的奇数位和偶数位交换
妙用位运算【按位与、按位或、移位】,交换一个二进制位的奇偶数位
87 0
C生万物 | 使用宏将一个整数的二进制位的奇数位和偶数位交换