gpt4 book ai didi

c - 如何交换二进制数中的每 2 位?

转载 作者:行者123 更新时间:2023-12-02 21:49:46 24 4
gpt4 key购买 nike

我正在研究这个编程项目,其中一部分是编写一个仅包含按位运算符的函数,该运算符每两位切换一次。我提出了一种梳状算法来完成此任务,但它仅适用于无符号数字,有什么想法可以让它也适用于有符号数字吗?我完全被这个问题难住了。这是我到目前为止所拥有的:

        // Mask 1 - For odd bits
int a1 = 0xAA; a1 <<= 24;
int a2 = 0xAA; a2 <<= 16;
int a3 = 0xAA; a3 <<= 8;
int a4 = 0xAA;
int mask1 = a1 | a2 | a3 | a4;

// Mask 2 - For even bits
int b1 = 0x55; b1 <<= 24;
int b2 = 0x55; b2 <<= 16;
int b3 = 0x55; b3 <<= 8;
int b4 = 0x55;
int mask2 = b1 | b2 | b3 | b4;

// Mask Results
int odd = x & mask1;
int even = x & mask2;

int newNum = (odd >> 1) | (even << 1);

return newNum;

通过将变量“或”在一起来手动创建掩码是因为唯一可以使用的常量位于 0x00-0xFF 之间。

最佳答案

问题是 odd >> 1 将以负数对扩展进行签名。只需再执行一次and即可消除重复的位。

int newNum = ((odd >> 1) & mask2) | (even << 1);

关于c - 如何交换二进制数中的每 2 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com