c - 交换未知变量类型的每两位

标签 c bit-manipulation bit generic-programming

我需要交换每两个相邻位作为通用操作,这将对给定的每个变量类型执行此操作。

我想到了每个字节所需的掩码和操作:

(var & 0x55) << 1 | (var & 0xAA) >> 1

但是我如何让这个应用程序让我们说一个整数? 我是否需要使用上述掩码创建一个 sizeof(int) unsigned char 数组并以这种方式应用操作?

最佳答案

您可以逐字节执行此操作(与逐个字符相同)。

例如:

int n = 0xAA55A55A;
unsigned char *p = (unsigned char *) &n;

for (; p < (unsigned char *) &n + sizeof(n); p++)
   *p = (*p & 0x55) << 1 | (*p & 0xAA) >> 1;

关于c - 交换未知变量类型的每两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034541/

相关文章:

c++ - boolean 变量按位非

matlab - 如何在 MATLAB 中有效地编码位串?

c# - 从二维位数组中提取位

c - 套接字错误 : connection refused

c - 如果它部分匹配字符串参数,如何从文件中返回特定行? [C]

algorithm - 最小化 K 切割后最大组的大小

c - n 位设置为 1 的第 n 个最小数

c++ - 在 .o 文件中本地化函数体 block

c - C中的字符问题

java - 这个二进制文档是什么意思?