二进制运算符

二进制运算符

& 与运算

两者都为1 则为1,否则为0,(乘法运算)

101 & 110=100

| 或运算

两者只要有一个为1,则为1,否则为0

101| 110= 111

~ 非运算

1取0,0取1,包括符号位

~101= 010

~5 (0000 0101)= -6(1111 1010)

^ 异或运算

相等 为0,不等为1,(不进位加法)

101 ^ 110 = 011

5 (101) ^ 6(110) = 3(011)

异或运算满足一下特性:

A^B = C,AC=B,BC= A;

D^D = 0;

<< 有符号左移

1:二进制位整体左移,移出的部分舍弃,低位补0;

2:左移之后的数 = 操作数据*2移动位数

5<<1 = 5x21=10,5<<2=5x22 = 20,5<<3 = 5x23=40

>> 有符号右移

1:二进制位右移,移出的部分舍弃,若为正数,高位补0;若为负数,高位补1

2:右移之后的数 = 操作数据 / 2移动位数

5>>1 = 5/21=2,5>>2=5/22 = 1,5>>3 = 5/23=0

>>>无符号右移

不管正数还是负数,高位都补0,

  • 不管是 有符号还是无符号,符号位都是参与移动的,只是最高位的补充方式不一样

  • 至于为什么没有无符号左移,因为和有符号左移一样都是低位补0,所以功能是一样的

  • 不管是左移还是右移, 实际移动位数=需要移动位数%操作数据类型位数

例如,int 类型 共32位,移动位数为33 ,则实际移动位数 =33%32=1,移动32位等于其本身

long类型共64位,移动位数位65,则实际移动位数=65%64 =1,移动64位等于其本身

  • 当移动位数较大时,会都默认为0
posted @ 2022-09-16 16:29  水映苑  阅读(83)  评论(0编辑  收藏  举报