位运算

1.不用加减乘除做加法

解法:分为三步①各位相加不进位,即先按位异或;②做进位,按位与并左移位;③结果相加,直至没有进位

int add(int num1, int num2)
{
    int sum, carry;
    do
    {
        sum = num1 ^ num2;//先按位异或
        carry = (num1 & num2) << 1;//按位与并左移位

        num1 = sum;
        num2 = carry;
    }while(num2 != 0);//结果相加,直至没有进位

    return num1;
}

2.不使用新变量,交换变量的值

解法一:

a = a ^ b;
b = a ^ b;
a = a ^ b;

解法二:

a = a + b;
b = a - b;
a = a - b;

持续更新中。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 套路 涉及到二进制、不用单目运算符做加法运算,其中某一位的问题(两数不同,至少有一位不同) 求解运算符选择受限时可...
    coderjiege阅读 441评论 0 0
  • 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实...
    JxYoung阅读 42,378评论 22 90
  • 移位运算 移位运算包含逻辑移位(logical shif) 和 算术移位(arithmetic shift)。 逻...
    wayyyy阅读 946评论 0 0
  • 一、常见的位运算操作实现功能 1、 负数的等式变换:-n == ~(n-1) == ~n+1。负数的二进制形式==...
    XDgbh阅读 1,079评论 0 0
  • 之前接触到位运算的时候,总是似懂非懂,一脸萌比。最近花点时间,细细研究,其实发现也相当简单。下面来举两个相当实用的...
    alighters阅读 1,471评论 0 11