如何使用按位运算符和位操作在C中交换2个整数?

窥视

使用位操作交换2个整数时遇到一些麻烦。下面是我的代码和控制台输入/输出。

#include <stdio.h>

int main() {
    int num1 = 0;
    int num2 = 0;
    int position = 1;

    scanf("%d", &num1);
    scanf("%d", &num2);

    for (int bitindex = 0; bitindex < 8; bitindex++) {
        printf("\nPosition: %d\n", position);
        printf("Number 1: %d\n", num1);
        printf("Number 2: %d\n", num2);
        if ((num1 & position) != (num2 & position)) {
            num1 ^= (num1 << bitindex);
            num2 ^= (num2 << bitindex);
        }
        if (bitindex == 0) {
            position++;
        }
        else {
            position *= 2;
        }
    }

    // printf("Number 1: %d\n", num1);
    // printf("Number 2: %d\n", num2);
}

输出:

4 7
Position: 1 Number 1: 4 Number 2: 7
Position: 2 Number 1: 0 Number 2: 0
Position: 4 Number 1: 0 Number 2: 0
Position: 8 Number 1: 0 Number 2: 0
Position: 16 Number 1: 0 Number 2: 0
Position: 32 Number 1: 0 Number 2: 0
Position: 64 Number 1: 0 Number 2: 0
Position: 128 Number 1: 0 Number 2: 0

我可能做的是完全错误的事情,对于底层C编程我还是很陌生。我的算法天生就有缺陷吗?有没有更简单的方法可以做到这一点?欢迎任何帮助和建议。

卡米尔库克

我的算法天生就有缺陷吗?

是。您需要在特定位置反转位。

       num1 ^= position;
       num2 ^= position;

1 * 2等于1 + 1只需执行position *= 2;每个循环。

int position = 1;
for (int bitindex = 0; bitindex < 8; bitindex++) {
    if ((num1 & position) != (num2 & position)) {
       num1 ^= position;
       num2 ^= position;
    }
    position *= 2;
}

有没有更简单的方法可以做到这一点?

是的,按照注释中的建议用xor交换值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按位运算符和位操作

来自分类Dev

该函数如何仅使用按位运算符求和3个整数?

来自分类Dev

该函数如何仅使用按位运算符对3个整数求和?

来自分类Dev

C中的按位运算符和移位问题

来自分类Dev

使用按位和运算符c ++

来自分类Dev

使用位运算符JAVA交换int [] []数组中每行/列的顶部和底部2位

来自分类Dev

如何按位操作?(运算符 & 不能应用于整数或整数)

来自分类Dev

如何使用按位运算符交织2个布尔值?

来自分类Dev

如何使用按位运算符交织2个布尔值?

来自分类Dev

Java中的按位运算符仅适用于整数和长整数?

来自分类Dev

Java中的按位运算符仅适用于整数和长整数?

来自分类Dev

如何使用位操作在C中不使用+运算符就将两个数相加

来自分类Dev

使用按位运算符重建整数

来自分类Dev

按位运算符和for循环

来自分类Dev

Java中的按位和运算符

来自分类Dev

重载类函数中的按位And(&)运算符和“ * this”

来自分类Dev

.NET Framework方法中的按位和运算符

来自分类Dev

在Visual Studio 2015中的符号扩展操作数上使用按位或运算符

来自分类Dev

按位运算符如何工作

来自分类Dev

按位运算符如何工作?

来自分类Dev

按位运算符如何工作?

来自分类Dev

C ++:如何获取位集的MSB(最高有效位)(使用按位运算符)?

来自分类Dev

hashCode中按位运算符>>>

来自分类Dev

Gremlin中的按位运算符

来自分类Dev

PHP中的按位运算符

来自分类Dev

C按位运算符

来自分类Dev

C ++'>'按位运算符

来自分类Dev

C按位运算符示例

来自分类Dev

在C语言(也是C ++)中,“&”运算符如何同时用作地址运算符和按位运算符?由于C不支持运算符重载

Related 相关文章

热门标签

归档