位运算符(这玩意未曾理解清楚过,理解了过段时间也忘嘞)

计算机是一种电子设备,由复杂的数字和模拟电子元器件组成。数字电子元器件的一个最小单元只有带电和不带电两种状态,带电状态表示为数值1,不带电状态表示为数值0。多个这样的单元组合可以表示更多状态,也就可以表示更多的数据,其中,每个单元分别表示数据中的一位,被称之为 bit 位,一个 bit 位中的数据只能是 0 或者 1。例如,3个电子元器件单元的组合可以具有 23 = 8 种状态,它可以表示 8 个数值,000 表示 0 ,001 表示 1,010 表示 2,011 表示 3,以此类推,111 表示 7,这种表示数据的方式就叫二进制。在实际应用中,总是将8个电子元器件单元组合起来使用这样的组合就称之为一个字节(byte),一个字节可以表示 28 = 256个数值,数值范围为0 ~ 255。任何信息在计算机中都是以二进制形式存在,位运算用于对操作数中的每一个二进制位进行运算,包括位逻辑运算符和位移动运算符。 位逻辑运算符: &:只有参与运算的两位都为1,运算结果才为1,否则为0。 |:只有参与运算的两位都为0,运算结果才为0,否则为1。 ^:只有参与运算的两位都不同,运算结果才为1,否则为0。

位移动运算符:

>>:将左边操作数在内存中的二进制数据右移右边操作数指定的位数,左边移空的部分,补上 左边操作数原来的最高位的二进制位值;

<<:将左边操作数在内存中的二进制数据左移右边操作数指定的位数,右边移空的部分补0。 例如,a = 0xE0000001,a在内存中的二进制状态为1110,0000,0000,0000,0000,0000 ,0000,0001。语句a<<2 执行后的结果为:1000,0000,0000,0000,0000,0000,0000, 0100。

>>>:将左边操作数在内存中的二进制数据右移右边操作数指定的位数左边移空的部分补0。

移位不会改变变量本身的值,位运算符也可以与“=”赋值运算符组合产生一些新的赋值运算符 ,如:“<<=”,“>>=”,“&=”,“^=”,“|=”等。

原文地址:https://www.cnblogs.com/kojya/p/2842341.html