昨天在leetcode做题的时候做到了371,原题是这样的: 371. Sum of Two Integers Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example: Given a = 1 and b = 2, return 3. 因为之前完全没有在实际练习中使用过位运算,所以刚看到这道题目的时候我的第一反应是 1.用乘除代替加减,但是一想,…
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution:    def Add(self, num1, num2):        # write code here        tsum=(num1^num2)&0xFFFFFFFF#step1:相加但不计进位的结果,因python无位数限制,在此将其限定在32位        carry=((num1&num2)<&l…
转自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位异或:&:按位与: | :按位或 计算机系统中,数值一律用补码来表示:因为补码可以使符号位和数值位统一处理,同时可以使减法按照加法来处理. 对补码做简单介绍:数值编码分为原码,反码,补码,符号位均为0正1负. 原码 -> 补码: 数值位取反加1 补码 -> 原码: 对该补码的数值位继续 取反加1 补码 的绝对值(称为真值):正数的真值就是本身,负数的真值是各…
题目是:Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. 思路:两个数的加法分为两步,对应位相加和进位. 举个简单的例子:997+24 我们平时计算时是将对应位相加和进位同时计算,其实可以保留下进位,只计算对应位相加,保留进位的位置(值).接下来,将进位向左移动一位,将上一步的结果与移位后的进位值进行对应位相加,直到没有进位结束. 对于二进制数的而言,对应…
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example:Given a = 1 and b = 2, return 3. 题目标签:Bit Manipulation 这道题目让我们做两数之和,当然包括负数,而且不能用+,-等符号.所以明显是让我们从计算机的原理出发,运用OR,AND,XOR等运算法则.一开始自己想的如果两个数都是正数,那么很简单,…
//求两个数中不同的位的个数 #include <stdio.h> int count_different(int a, int b) { int count = 0; int c = a^b; //a,b中不同的位即为1 while (c) { count++; c = c&(c - 1); //把c中最后一个1去掉 } return count; } int main() { printf("%d\n", count_different(3,8)); //3 p…
我们都知道,求一个数被另一个数整除的余数,可以用求余运算符”%“,但是,如果不允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注意:该方法只对除数是2的N次方幂时才有效. 在移位运算中我们可知,计算机中的数据都是0和1的序列,当我们把某个数字左移一位,该数字会扩大为原来的2倍:而将其右移一位时,该数字就会缩小为原来的1/2,即相当于对该数字做了一次被2整除的运算. 举例说明: 11的二进制是1011,如果右移一位的话,将变成0101,也就是5. 现在我们考虑11除以8…
题目:求两个数的较大值,不能使用if.>. 1.不使用if.>,还要比较大小,貌似就只能使用条件表达式: x=<表达式1>?<表达式2>:<表达式3>; (表达式1为true时,返回表达式2:否则返回表达式3) 2. 本题目中使用条件表达式: max(a.b)=<表达式1>? b:a; (表达式1为true时,返回b:否则返回a) 3.如何写表达式1,区分a与b的大小.(不用>) 可以使用位运算,判断a-b的符号位.符号位为1(负数),a&…
[note]一类位运算求最值问题 给定一些数,让你从中选出两个数a,b,每次询问下列中的一个 1.a and b的最大值 2.a xor b的最大值 3.a or b的最大值 神仙们都是FWT,小蒟蒻只好orz 首先三种问题的思路都是从高位往低位贪心 对于xor,直接枚举每个数Trie树上贪心 对于and,如果可选集合中有大于等于两个数当前位为1,那么答案这一位也是1,并把这一位为0的数删去 对于or,先维护一个高维前缀和,枚举每一个数,如果某一位为0,我们就贪心的看能不能补上1, 相当于询问是…
我们都知道,求一个数被另一个数整除的余数,可以用求余运算符”%“,但是,如果不 允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注 意:该方法只对除数是2的N次方幂时才有效. 在移位运算中我们可知,计算机中的数据都是0和1的序列,当我们把某个数字左 移一位,该数字会扩大为原来的2倍:而将其右移一位时,该数字就会缩小为原来的1/2, 即相当于对该数字做了一次被2整除的运算. 举例说明: 11的二进制是1011,如果右移一位的话,将变成0101,也就是5. 现在我们考虑1…