位操作,移位操作

时间:2022-08-21 15:21:52

1.移位操作<< >>


·属于移位运算符,在二进制的基础上对数字进行平移。

·算术运算符 优先于 位移位运算符 优先于 关系运算符


·
位移位运算符是同级别的,结合性是自左向右


规则左移,丢弃最高位0补最低位。右移,不带符号数,则补入的全为0。带符号位,补入的数等于原数的最左端

上的原数(符号位)。即右移符号位保持不变,正数补0,负数补1。如果移的位数>类型的最大位数,用左移的最大位数

模类型的最大位数,按余数进行移位。


例如无符号短整型变量a0111(对应二进制数为0000000001001001),


    则:a<<3结果为01110(对应二进制数为0000001001001000)a不变

                     a>>4结果为04 (对应二进制数为0000000000000100)a不变


      又如,设短整型变量a-4(对应二进制数为1111111111111100),


    则:a<<3结果为-32(对应二进制数为1111111111100000)a不变

                a>>4结果为-1(对应二进制数为1111111111111111)a不变





2.位操作& | ~逻辑操作&&||


1.按位与运算&


按位与运算符"&"双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结

果位才为1,否则为0。参与运算的数以补码方式出现。


例如9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码) 00000001(1的二进制补码)可见9&5=1


按位与运算通常用来对某些位清0或保留某些位。


eg.a的高八位清0,保留低八位, 可作 a&255运算(255的二进制数为0000000011111111)


2.按位或运算|

按位或运算符“|”双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1,结果位就为1。参与运算的两个数均以补码

出现。

例如9|5可写算式如下:00001001 | 00000101 = 00001101(十进制为13)可见9|5=13


3.按异或运算^


按位异或运算符“^”双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现

例如9^5可写成算式如下:00001001 ^ 00000101 = 00001100(十进制为12


4.求反运算符


求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如9的运算为:~(0000000000001001) = 1111111111110110



5.逻辑运算符 &&  ||

1,逻辑运算符

 && 逻辑与,可以理解为并且的意思.

 ||  逻辑或,可以理解为或者的意思,也就是条件可以2取一

! 逻辑非  (一元表达式)


2,逻辑与运算:&&

逻辑与连接的2个表达式,要能够求解成bool类型,一般情况下都是关系表达式.

整个逻辑与运算结果也是bool类型


bool isRight=表达式1&&表达式2 :当表达式1、2全为true时,其表达式的结果为true,总之,全1为1


3,逻辑或运算:||

逻辑或连接的2个表达式,要能够求解成bool类型,一般情况下都是关系表达式.

整个逻辑或运算结果也是bool类型

bool isRight=表达式1||表达式2:当表达式1、2中有一个为true ,其表达式的结果为true.总之,有1为1


4,逻辑非运算(取反):!(这是一个一元运算符)

用法:

!(布尔类型的表达式)

作用:

如果布尔类型的表达式为True,加!后其整个式子的结果为False.

如果布尔类型的表达式为False,加!后其整个式子的结果为True.

 bool isRight=!表达式:如果表达式的结果为true,则取反后为false,反之为true.