【漫步刷题路】-交换二进制的奇数位和偶数位

简介: 交换二进制的奇数位和偶数位

题目要求

使用宏交换二进制的奇数位和偶数位


必备知识

66e9e2401b33431384bc4c5ed0a3b19e.png

注意

  • 如果想要保留一个比特位,将其它位舍弃

方法:给要保留的比特位与上1,其它位与上0

如:
1000 0011
现在只想保留最高位的1
->只需与上:1000 0000
    1000 0011
   &1000 0000
   -----------
    1000 0000  这样就实现了保留最高位的1,其它舍弃的效果
  • 如果想要某一个位变成1,其它位不变

方法:给该位或上1,其他位或上0

如:
1000 0011
现在只想保留最高位的1
->只需与上:1000 0000
    1000 0011
   &1000 0000
   -----------
    1000 0000  
    这样就实现了保留最高位的1,其它舍弃的效果

思路分析1

a776774c3bc64599ba7da56b581795b4.png

代码1

#include<stdio.h>
#define SWAP(n)  n = ((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1)
int main()
{
  int a = 10;
  //0000 1010
  //奇偶交换结果:0000 0101 ->5
  int b = 20;
  //0001 0100
  //奇偶交换结果:0010 1000 ->40
  printf("%d\n", SWAP(a));
  printf("%d\n", SWAP(b));
  return 0;
}

思路分析2

ff62198067b94cdf9d37267a8bc73a19.png

代码2

#include<stdio.h>
#define SWAP(n)  n = ((n&0x55555555)<<1) ^ ((n&0xaaaaaaaa)>>1)
int main()
{
  int a = 10;
  //0000 1010
  //奇偶交换结果:0000 0101 ->5
  int b = 20;
  //0001 0100
  //奇偶交换结果:0010 1000 ->40
  printf("%d\n", SWAP(a));
  printf("%d\n", SWAP(b));
  return 0;
}
相关文章
|
4月前
|
Java
链表中奇数位和偶数位的置换
链表中奇数位和偶数位的置换
|
10月前
|
C语言
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)
55 0
|
3月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
4月前
|
算法
【一刷《剑指Offer》】面试题 11:数值的整数次方
【一刷《剑指Offer》】面试题 11:数值的整数次方
|
4月前
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
用一行代码(宏)交换一个二进制整数的奇数位和偶数位
|
9月前
|
C语言
C语言第三十二弹---打印整数二进制的奇数位和偶数位
C语言第三十二弹---打印整数二进制的奇数位和偶数位
|
4月前
打印2进制位数的奇数位和偶数位
打印2进制位数的奇数位和偶数位
C语音:打印整数二进制的奇数位和偶数位
总体思路: (一). 输入数据 (二). 打印奇数位: 使用 for循环 循环产生 1~32 之间的偶数, 使用 移位操作符 移动偶数位,移动后就是奇数位, 这时再 按位与1 取出当前位, 进行打印。打印完奇数后进行 换行
打印整数二进制的奇数位和偶数位
打印整数二进制的奇数位和偶数位
41 0
|
算法 C++ Python
每日算法系列【LeetCode 829】连续整数求和
每日算法系列【LeetCode 829】连续整数求和
101 0