程序员面试金典 -- 面试29之交换一个数的二进制的奇数位和偶数位
2017-05-14 12:58
274 查看
题目描述
请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
测试样例:
10
返回:5
思路:用这个数与0xAAAAAAAA相与,拿到偶数位,左移一位,变成奇数位,在拿这个数与0x55555555相与,拿到奇数位,右移一位,变成偶数位,奇数位和偶数位相加就变成新的数了。
请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
测试样例:
10
返回:5
思路:用这个数与0xAAAAAAAA相与,拿到偶数位,左移一位,变成奇数位,在拿这个数与0x55555555相与,拿到奇数位,右移一位,变成偶数位,奇数位和偶数位相加就变成新的数了。
#include<iostream> using namespace std; int ExchangeOddEven(int x) { int ret = ((x & 0xaaaaaaaa) >> 1)| ( (x & 0x55555555) << 1); return ret; } int main() { int ret = ExchangeOddEven(10); cout << ret <<endl; cout << "hello..."<<endl; return 0; }
相关文章推荐
- 使用宏将一个数二进制中的奇数位和偶数为进行交换
- C语言 定义一个宏,用于交换一个二进制序列的奇数位和偶数位
- 写一个宏可以将一个数字的奇数位和偶数位(二进制)交换。
- 交换一个整数二进制表示中的奇数位和偶数位
- 使用宏将一个数二进制中的奇数位和偶数为进行交换。
- //2.使用宏将一个数二进制中的奇数位和偶数为进行交换。 #include<stdio.h> #include<stdlib.h> #define EXH(x) \ ((x & 0x5555555
- 1.将数组A中的内容和数组B中的内容进行交换。(数组一样大) 2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 3.将三个数按从大到小输出。 4.求两个数的最大公约数。
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 【C语言】写一个宏交换数字的奇数位与偶数位
- [置顶] 【C语言】获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 交换一个整数的相邻奇数位与偶数位(即第0位与第1位交换,第2位与第3位交换...)
- 获取一个数二进制序列中所有的偶数位和奇数位
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 如何获取一个数二进制序列中的偶数位和奇数位
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 【C语言】获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。