位运算符

Java基础--位运算符

北慕城南 提交于 2020-02-07 05:54:57
文章目录 1:运算符分类? 2:&(与) 运算符使用说明 ? 3:I (或) 运算符使用说明 ? 4:^ (异或) 运算符使用说明 ? 5:~ (取反) 运算符使用说明 ? 6:<< (向左移位) 运算符使用说明 ? 7:>> (向右移位) 运算符使用说明 ? 8:无符号右移(>>>) 运算符使用说明 ? 9:代码地址 1:运算符分类? & (与) | (或) ^ (异或) ~(取反) << (左移) (>>) (向右移位) (>>>) 无符号右移 2:&(与) 运算符使用说明 ? 只有两个位上面都是 1 才是 1,其他为 0 特点:得到的结果的 max = 两个数中的最小值 比如 18 & 4 得到的值得肯定是 < = 4的;所以当需要把值控制在某个范围内时,可以使用该操作符。 3:I (或) 运算符使用说明 ? 只要有 一个位为1 ,则结果为1 。 4:^ (异或) 运算符使用说明 ? 只有两位数不同时才为 1。 特点: 与1相∧,使特定位翻转。 0010110 ^ 0011111 = 0001001 与0相∧,保留原值。 0010110 ^ 0000000= 0010110 交换两个值,不用临时变量 代码示例: int a = 3, b = 4; a = a ^ b; b = b ^ a; a = a ^ b; System.out.println("a = " + a +

Python位运算符

佐手、 提交于 2020-02-05 12:19:56
Python位运算符:将 int 长整型数据看做二进制进行计算,主要是将前面的数和后面的数的对应位置上的数字 0,1 进行判断。      & 按位与:如果对应位置上的两个数都为 1,那么得到的该结果的该位置上也为 1 。其他情况都为 0。      | 按位或:如果对应位置上的两个数有一个为 1 或都为 1,则得到的该结果的该位置上也为 1 。其他情况都为 0。     ^ 按位异或:如果对应位置上的两个数为 0 和 1 或 1 和 0,则得到的该结果的该位置上也为 1 。其他情况都为 0。     ~ 按位取反:如果~后面为正数或 0,则结果为-(数+1),           如果后面的数为负数,则结果为-(负数(带符号)+1)。   << 左移运算符:将前面的数乘以 2 的(后面的数) 次幂。   >> 右移运算符:将前面的数除以 2 的(后面的数) 次幂。 #查看二进制 a = 2 b = 3 print(bin(a)) # 0b10 1*2的1次 + 0*2的0次 print(bin(b)) # 0b11 1*2的1次 + 1*2的0次 # & 按位与:如果对应位置上的两个数都为 1,那么得到的该结果的该位置上也为 1 。其他情况都为 0。 print(a & b) # 0b1 为与的结果 # | 按位或:如果对应位置上的两个数有一个为 1 或都为 1

04 位运算符、运算符优先级

家住魔仙堡 提交于 2020-01-26 14:11:18
# ###(7)位运算符: & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 print(res) ''' 10011 01111 00011 ''' # | 按位或 res = var1 | var2 print(res) ''' 10011 01111 11111 ''' # << 左移 """ n<<m n乘以2的m次幂 """ res = 5 << 2 # 相当于5 * 2的2次幂 """ 00000101 00010100 4+16 = 20 """ # >> 右移 '''n>>m n除以2的m次幂''' res = 5 >> 1 """ 00000101 00000010 """ print(res) # ^ 按位异或 """两个值[不相同]方为真,两个值[相同]方为假""" res = var1 ^ var2 ''' 10011 01111 11100 ''' print(res) # ~ 按位非 - ( n+1 ) res = ~19 res = ~-21 print(res) # 运算符的优先级 ''' 一元运算符: 同一时间只操作一个数字运算的 ( ~ - ) ~19 二元运算符: 同一时间只操作两个数字运算的 (+ - * /) 5 + 3 整体一元运算符优先级 > 二元运算符

位运算符

只谈情不闲聊 提交于 2020-01-18 05:05:16
按位与(&) 通常用于二进制的取位操作。相同位的两个数字都为1,则为1;若有一个不为1,则为0. 例如一个数&1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,最末位为1表示该数为奇数。 按位或(|) 相同位只要一个为1即为1。通常用于二进制特定位上的无条件赋值,例如一个数|1的结果就是把二进制最末位强行变成1.如果需要把二进制最末位变成0,对这个数|1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。 按位异或(^) 相同位不同则为1,相同则为0。 两次异或同一个数最后结果不变,即(a^ b)^ b=a; 按位取反(~) not运算的定义是把内存中的0和1全部取反。 移位运算符 (1)移位运算符组成的表达式也属于算数表达式,其值为算数值。 (2)左移运算符是将一个二进制的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0.右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移除位被丢弃,左边移出的空位一律补0,或者补符号位。 (3)在移位运算时,byte、short和char类型移位后的结果会变成int类型,规定实际移动的次数是移动次数和32的余数,也就是移位33词和移位1次得到的结果相同。 注意:如果是负数,在左侧填充的值就是1而不是0 (4)负数的二进制: 取负数的绝对值,将其转化成二进制字节形式。 将源码取反(0的变成1

第16课 位运算符分析

偶尔善良 提交于 2020-01-11 20:46:28
1. C 语言中的位运算符——直接对bit位进行操作,效率最高 & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 2. 左移和右移注意点 (1)左 操作数 必须为整型类型:char和short被隐式转换为int后进行移位操作 (2)右 操作数 的范围必须为: [0,31]。其他值属未定义行为,不同编译器处理不同。 (3)左移 运算符 << 将运算数的二进制位左移:规则为高位丢弃, 低位补0 (4)右移 运算符 >> 把运算数的二进制位左移:规则为 高位补符号 ,低位丢弃 3. 有趣的问题:0x1 << 2 + 3 的值会是什么? 【实例分析】位运算符初探 #include <stdio.h> int main() { printf("%d\n", 3 << 2); //3<<2 ===> 0x11<<2 ===>1100,即12 printf("%d\n", 3 >> 1); //0x11<<1, 即1 printf("%d\n", -1 >> 1);//0x1111>>1 ,即0x1111,仍为1 printf("%d\n", 0x01 << 2 + 3);//相当于0x01<<(2+3),即32 printf("%d\n", 3 << -1); // oops!右操作数必须为[0,31],不同编译器处理方式不同 return 0; } 4. 小贴士—

深入理解按位异或运算符

让人想犯罪 __ 提交于 2020-01-10 04:01:05
深入理解按位异或运算符 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 即:    0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。       10100001^00000110 = 10100111 (2) 实现两个值的交换,而不必使用临时变量。 例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:     a = a^b;   //a=10100111     b = b^a;   //b=10100001     a = a^b;   //a=00000110 (3) 在汇编语言中经常用于将变量置零: xor a,a (4) 快速判断两个值是否相等 举例1: 判断两个整数a,b是否相等,则可通过下列语句实现: return ((a ^ b) == 0) 举例2: Linux中最初的ipv6_addr_equal()函数的实现如下: static inline int ipv6_addr

python位运算符的使用方法及应用(清晰明了,一看就会)

百般思念 提交于 2019-12-15 16:17:39
导言 位运算符是用来操作二进制的。 位运算共有 & | ^ ~ << >>六种操作方法 二进制在python中表示为”0b”。例如 a = 0b100110。bin函数可以把十进制转化为二进制数。 & (与) 如果两个二进制相同位数均为1,则返回的数字的二进制在该位置值也为1,否则为0。 (其中,a = 50, b = 23, a & b = 18,均为int) | (或) 如果两个二进制相同位数至少有一个1,则返回的数字的二进制在该位置值也为1,否则为0。 (其中,a = 50, b = 23, a | b = 55,均为int) ^ (异或) 如果两个二进制相同位数上的数字不同,则返回的数字的二进制在该位置值为1,否则为0。 (其中,a = 50, b = 23, a ^b = 37) 异或的性质: 满足交换律,即 a ^ b = b ^ a; 相同两个数异或为0 ,即 a ^ a = 0; 0异或一个数为那个数本身,即 0 ^ a = a。 ~ (取反) 将数字转化为二进制后,数字前加一个负号,二进制加1,再返回变换后二进制对应的数。 ( 可以理解为 ~a = - (a + 1) ) <<(左移) 将数字转化为二进制后,向二进制里添加几个零(取决于左移的位数),再返回变换后二进制对应的数。 >>(右移) 将数字转化为二进制后,将二进制里最后面的几个数剔除(取决于右移的位数)

JavaScript的位运算符

别等时光非礼了梦想. 提交于 2019-12-14 11:45:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 重温整数 ECMAScript整数有两种类型,有符号整数(允许用正数和负数)和无符号整数(只允许用正数)。在ECMAScript中,所有整数字面量默认都是有符号整数。 有符号整数,数值范围从-2147483648到2147483647;无符号整数,数值范围从0到4294967295。记住,所有整数字面量都默认存储为有符号整数,只有ECMAScript的位运算符才能创建无符号整数。 把无符号整数转换为字符串,只返回有效位。也就是前面都是0的就不返回了。 var i = 18, j = -18; alert(i.toString(2)); // -> '10010' alert(j.toString(2)); // -> '-10010' 虽然负数的二进制显示是在正数的二进制表示前加负号,但负数存储也是二进制代码,采用的形式是二进制补码。 计算二进制补码步骤有3步: 确定数字的非负版本的二进制表示。如,-18的补码要先确定18的二进制表示 求得二进制反码,即把0替换为1,把1替换为0 在二进制反码上加1 位运算符NOT(~) 位运算符由否定好(~)表示,它是ECMAScript中为数不多的与二进制算术有关的运算符之一。位运算符NOT是三步的处理过程: 把运算数转为32位二进制数字 再转为它的二进制反码

Java中的位运算符

荒凉一梦 提交于 2019-12-06 11:40:58
Java中的位运算符 文本关键字:位运算符、位逻辑运算符、移位运算符 一、位运算符 大家在接触运算符的时候通常都已经学完了变量的使用,对于算术以及赋值运算的感觉就是So easy!这不就是小学的知识嘛,对于逻辑运算符的部分依然无压力,这不就是中学的知识嘛?但是突然出现了一个位运算符,啥是移位?啥是异或?接下来就先从简单的开始。 说起位运算符,其实就是基于数据存储的二进制位进行的运算,更底层,所以效率更高。另外一个需要注意的问题就是:由于小数在进行存储的时候采用的是IEEE(符号、指数、尾数)方式,并不止对整数和小数部分直接转换为二进制来存储的,所以小数是不能使用位运算符来操作的。对于整数和字符型的运算符操作也有一些潜在的法则,相信看完这篇文章你很容易就会掌握。 二、逻辑运算 在逻辑运算中我们已经使用过能够表达逻辑意义的运算符,如:&&,||,!。这些运算符都有一个共同点,那就是:运算符两边都是布尔值或布尔表达式,他们能够操作的数据类型有限,只能够帮我们进行逻辑运算。有些教材将&,|等位运算符也归为逻辑运算符,因为按位与(&)、按位或(|)能够操作的数据类型较多,其中就包括布尔类型,并且也能够帮助我们进行逻辑运算,但是小编还是建议按照符号本身的运算方式和操作数据类型等来记忆。 1. 与(&) 与运算 与运算相当于物理电路中的串联电路,我们假设用1代表通路,用0代表断路

Go 位运算符

此生再无相见时 提交于 2019-12-06 09:56:57
Go 位运算符 package main import "fmt" func main() { var a uint = 60 /* 60 = 0011 1100 */ var b uint = 13 /* 13 = 0000 1101 */ var c uint = 0 c = a & b /* 12 = 0000 1100 */ fmt.Printf("Line 1 - Value of c is %d\n", c ) c = a | b /* 61 = 0011 1101 */ fmt.Printf("Line 2 - Value of c is %d\n", c ) c = a ^ b /* 49 = 0011 0001 */ fmt.Printf("Line 3 - Value of c is %d\n", c ) c = a << 2 /* 240 = 1111 0000 */ fmt.Printf("Line 4 - Value of c is %d\n", c ) c = a >> 2 /* 15 = 0000 1111 */ fmt.Printf("Line 5 - Value of c is %d\n", c ) } 本文转自: http://codingdict.com/article/23571 来源: https://www.cnblogs.com