位运算

位运算实现加减乘除

狂风中的少年 提交于 2019-11-30 06:36:20
加法: lintcode 第1题 https://www.lintcode.com/problem/a-b-problem/description 就是一个简单的加法,正常a+b就可以ac,如何通过位运算来实现。话不多说,直接贴代码 基本原理: a+b = a^b + (a&b)<<1; 也就是先按照没有进位计算 a^b, 然后再只计算进位 (a&b)<<1;然后再相加就行了。但这里还是用到了加法,那如何完全不使用加法呢, 简答提示: 重复此步骤即可,直到没有进位产生。 提示:如果按照上面的写法,是不对的,因为优先级来说 + 大于 << 大于 ^(意外发现中文输入法里^是省略号……),所以如果想得到正确的结果,加括号把还是: a+b = (a^b) + ((a&b)<<1); 剩下的自己实现吧。(又发现一个,中文输入法下shift+space和ctrl+.有什么区别;;;;;,,,,,符号不一样,一个拉丁符号,一个全宽符号,可以实现中文输入法输入英文符号,编代码时好像有那么点小小的用处) 待更:减乘除 来源: https://www.cnblogs.com/zdj8023/p/11570185.html

|、&、||、&&符号含义

爷,独闯天下 提交于 2019-11-30 06:14:32
|和&为计算机中二进制之间的位运算 在计算机中二进制的0表示false,1表示true。 |为位运算中的或运算:它的运算逻辑为 一真则真,全假则假 &为位运算中的并运算:它的运算逻辑为 一假则假,全真则真 来源: https://www.cnblogs.com/jasonboren/p/11566679.html

快速幂模板

孤者浪人 提交于 2019-11-30 06:08:23
int Montgomery(int a,int n,int c) //求a n % c { int ans=1; a=a%c; while(n>0) { //位运算n&1 1表示n为奇数,为0表示偶数 if(n&1)ans=(ans*a)%c; //奇数,补一项,n&1等价与n%2 1 n=n>>1; //位运算,n=n>>1等价于n=n/2 a=(a*a)%c; } return ans; } 来源: https://blog.csdn.net/xboxRan/article/details/101145554

Java 位运算超全面总结

大憨熊 提交于 2019-11-30 03:17:17
1.原码、反码、补码 关于原码、反码、补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动简洁的解释: 对原码、反码、补码最通俗易懂,生动简洁的解释 ,墙裂建议大家先看完这篇科普文章。在继续讨论之前你要先明白一点: 整数在计算机内部都是以补码形式存储的 。 2.Java 位运算概览 OK 都看到这儿了那我就假定你已经掌握了原码、反码、补码相关知识(虽然上面那段几乎啥也没讲,纯凑字数) 不废话了。 首先,在程序中,位运算符的优先级很低!且位运算是只针对整型(是的这里指所有整型)数据的,无论正负,先搞清楚这两点,我们继续说。 Java 中的位运算共有 与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>) 这7种,概览见下表: 符号 含义 详解 & 位与 两个比特位都为 1 时,结果才为 1,否则为 0 (位与操作满足交换律和结合律,甚至分配律) | 位或 两个比特位都为 0 时,结果才为 0,否则为 1 (位或操作满足交换律和结合律,甚至分配律) ~ 位非 即按位取反,1 变 0,0 变 1 ^ 异或 两个比特位相同时(都为 0 或都为 1)为 0,相异为 1(异或操作满足交换律和结合律,甚至分配律。任何整数和自己异或的结果为 0

位运算基础知识

走远了吗. 提交于 2019-11-30 03:01:45
一、二进制与十进制的相互转化: 1.十进制转二进制: (1)十进制整数转二进制数:“除以2取余,逆序排列,直到商为0”(除2取余法) (2)十进制小数转二进制数:“乘以2取整,顺序排列,直到积中的小数部分为0,或者达到所要求的精度为止”(乘2取整法) 2、二进制转十进制: 个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十 分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。 二、java中的运算符 Java的运算符,分为四类: 算数运算符 、 关系运算符 、 逻辑运算符 、位运算符。 算数运算符(9):+ - * / % ++ -- 关系运算符(6):== != > >= < <= 逻辑运算符(6):&& || ! ^ & | 逻辑与'&&' , 逻辑或'||' , 逻辑非'!' , 逻辑异或'^' , 逻辑与'&' , 逻辑或'|' 位运算符(7):& | ~ ^ >> << >>> 位与'&' , 位或'|' , 位非'~' , 位异或'^' , 右移'>>' , 左移'<<' , 0填充的右移'>>>' 位运算: 右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时) 或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。 将一个数左移"

NumPy 位运算

送分小仙女□ 提交于 2019-11-29 19:40:00
NumPy “bitwise_” 开头的函数是位运算函数。 bitwise_and bitwise_and() 函数 对数组中整数的二进制形式执行位与运算。 import numpy as np print ( '13 和 17 的二进制形式:' ) a , b = 13 , 17 print ( bin ( a ) , bin ( b ) ) print ( '\n' ) 13 和 17 的二进制形式: 0b1101 0b10001 print ( '13 和 17 的位与:' ) print ( np . bitwise_and ( 13 , 17 ) ) 13 和 17 的位与: 1 bitwise_or bitwise_or()函数对数组中整数的二进制形式执行位或运算。 import numpy as np a , b = 13 , 17 print ( '13 和 17 的二进制形式:' ) print ( bin ( a ) , bin ( b ) ) print ( '13 和 17 的位或:' ) print ( np . bitwise_or ( 13 , 17 ) ) 13 和 17 的二进制形式: 0b1101 0b10001 13 和 17 的位或: 29 invert invert() 函数 对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。

java中位运算^,&,<<,>>,<<<,>>>总结

荒凉一梦 提交于 2019-11-29 19:11:18
1.^(亦或运算) ,**针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1 } 2 =======>0010 3 =======>0011 2^3就为0001,结果就是1 2.&(与运算) 针对二进制,只要有一个为0,就为0 还是上述的例子 public static void main(String[] args) { System.out.println("2&3运算的结果是 :"+(2&3)); //打印的结果是: 2&3运算的结果是 :2 } 3.<<(向左位移) 针对二进制,转换成二进制后向左移动3位,后面用0补齐 public static void main(String[] args) { System.out.println("2<<3运算的结果是 :"+(2<<3)); //打印的结果是: 2<<3运算的结果是 :16 } 4.>>(向右位移) 针对二进制,转换成二进制后向右移动3位, public static void main(String[] args) { System.out.println("2>>3运算的结果是 :"+(2>>3)); //打印的结果是:

JS你所不知的小数取整方法

怎甘沉沦 提交于 2019-11-29 18:25:22
先介绍几种基本方法。 1.toFixed()方法 toFixed() 方法是属于 Number 对象的方法,可以把 Number 四舍五入到指定的小数位数,括号内为小数位数,范围为0~20,为0时即取整数。 1.5.toFixed(0) //返回2 toFixed()方法是平时使用最多的方法,因为它不仅可以取整,还可以保留指定小数位数,适用范围较广。 2.parseInt()方法 parseInt()直接舍弃掉小数部分,只取整数: parseInt(1.5) //返回1 3.Math函数 Math函数共有3种: Math.ceil()方法,向上取整: Math.ceil(1.5) //返回2 Math.floor()方法,向下取整: Math.ceil(1.5) //返回1 Math.round()方法,四舍五入: Math.ceil(1.5) //返回2 上面的3种方法大家应该都知道并且使用过,而位运算大概是使用最少的方法了,但其实位运算符使用十分方便,而且可以使代码更简洁。 4.位运算 这里介绍两种位运算方法。 1.非运算“~” “~”的作用是将数字转化32位有符号整数并按位取反: ~1.5 //返回-2 因此,双波浪线的写法就可以把数字的小数部分舍弃,转换为整数: ~~1.5 //返回1 在数字转换为32位整数不会溢出的情况下可以使用,相当于Math.floor()方法。 2

Python的二进制位运算

时光怂恿深爱的人放手 提交于 2019-11-29 15:13:45
Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示: &:按位与 |:按位或 ^:按位异或 ~:取反 <<:左移 >>:右移 对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明: (1)首先看取反 >>> ~1 -2 >>> ~0x0001 -2 >>> 正整数1,int型是32位的,就是00000000 00000000 00000000 00000001 求反变为11111111 11111111 11111111 11111110,这正好是-2的补码。同样十六进制的0x0001结果是一样的。 (2)按位与 >>> 1&2 0 >>> 1&3 1 >>> 对于按位与,就是对参加运算的两个整数的补码逐位进行逻辑与运算,即参加运算的两个运算量,如果两个相应位都为1,则该位的结果为1,否则为0。 (2)按位或 >>> 1|1 1 >>> 1|2 3 >>> 对于按位或,就是对参加运算的两个数字的补码逐位进行逻辑或运算,即参加运算的两个运算量,只要两个相应位中有一个为1,那么该位的结果为1;只有两个相应位都为0时,该位的结果才为0。 (3)按位异或 >>> 1^1 0 >>> 1^2 3 >>> 对于按位异或

(位运算)把字符串转换成整数

本秂侑毒 提交于 2019-11-29 14:57:38
public int StrToInt(String str) { if (str == null || str.length() == 0) return 0; boolean isNegative = str.charAt(0) == '-'; int ret = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (i == 0 && (c == '+' || c == '-')) /* 符号判定 */ continue; if (c < '0' || c > '9') /* 非法输入 */ return 0; ret = ret * 10 + (c - '0'); } return isNegative ? -ret : ret; } 边界条件: 数据上下 溢出 空字符串 只有正负号 有无正负号 错误标志输出 来源: https://my.oschina.net/u/3973793/blog/3106012