本章主要介绍位运算操作符及操作规则。位运算是指进行二进制位的运算。在编写系统软件时,经常要处理二进位的问题。一、数据的存贮1.字节与位①字节(byte):存储器的基本单元,每个字节都有一个地址,一个字节由8个二进制位组成。②位(bit):是用来存放二进制数0或1的基本位置。③字(word):由若干个字节组成的存储单元,每一个存储单元可以存放一个数据或一条指令。一、数据的存贮2.原码、反码和补码①原码:二进制数,最高位作符号位(0表示正,1表示.负),其余各位代表数值本身的绝对值。②反码:正数的反码与原码相同,负数的反码是除符号位以外的其它各位取反。③补码:正数的补码与原码相同,负数的补码是其反码加1。注意:计算机是以补码形式存放数据的,计算机中的算术运算都采用补码运算.一、数据的存贮例:7的原码000001117的反码000001117的补码00000111例:-7的原码10000111-7的反码11111000-7的补码11111001一、数据的存贮负数的原码转换为补码方法:①将该负数加1。②取绝对值用二进制表示。③求反。注意:该方法不适合-0。例:求-7的补码①将-7加1,得到-6。②取-6的绝对值用二进制表示:00000110。③对00000110求反,得到:11111001。一、数据的存贮负数的补码转换为原码方法:①最高位不动,其余取反,加1。注意:该方法不适合-0。例:求11111001的原码①11111001取反10000110加110000111补码的算术运算①补码运算时,其符号为与数值部分一起运算.②补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失)。③用补码运算,其运算结果亦为补码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求补才是其真值。一、数据的存贮举例[例1]已知X=+1101,Y=+0110,用补码计算Z=X-Y。解:[X]补=01101,[-Y]补=11010,则[Z]补=[X]补+[-Y]补=01101+11010=100111,其真值为Z=+0111。[例2]已知X=+0110,Y=+1101,用补码计算Z=X-Y。解:[X]补=00110,[-Y]补=10011,则[Z]补=[X]补+[-Y]补=00110+10011=11001,其真值为Z=-0111。一、数据的存贮二、位运算运算符含义操作类型结合方向~按位取反单目运算符自右至左左移位双目运算符自左至右右移位双目运算符自左至右&按位与双目运算符自左至右∧按位异或双目运算符自左至右|按位或双目运算符自左至右二、位运算1.按位与运算符(&)功能:将参加运算的两操作数,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。即0&0=0;0&1=0;1&0=0;1&1=1。例如:9&5的值为19=00001001(&)5=0000010100000001二、位运算2.按位或运算符(|)功能:将参加运算的两个操作数的对应二进制位进行或运算。两个相应的二进制位中只要有一个为1,该位的结果值为1。即0|0=0;0|1=1;1|0=1;1|1=1。例如:9|5的值为1300001001(|)0000010100001101二、位运算3.按位异或运算符(∧)功能:当参加按位异或运算的两操作数的对应位不同时,结果为1,相同时结果为0。即0∧0=0;0∧1=1;1∧0=1;1∧1=0。例如:9∧5的值是1200001001(∧)0000010100001100二、位运算4.按位取反运算符(~)功能:对一个二进制数按位取反,即将0变1,1变0。例如:对操作数9进行按位求反。00001001(~)11110110所以,~9的值为246。二、位运算5.左移运算符()功能:是把“”左边的操作数的各二进位全部左移若干位,由“”右边的数指定移动的位数,低位空缺处补0,高位左移后溢出,舍弃不起作用。例如:a的值为9,进行运算a1的值为1800001001()100010010二、位运算6.右移运算符()功能:把“”左边的操作数的各二进位全部右移若干位,由“”右边的数指定移动的位数,高位空缺处补0或1,移出的低位被舍弃。例如:a的值为39,进行运算a2的值为900100111()200001001注意:操作数是有符号负数,即最高位为1时,进行右移后高位空缺处要补1,否则高位空缺处补0。二、位运算7.位运算赋值运算符&=,|=,=,=,∧=,是位运算符与赋值运算符组合成的位运算赋值运算符。它们与复合的赋值运算符类似。例如:a&=b相当于a=a&ba=2相当于a=a2