1、本章重点 15.1 位运算符 15.2 位运算符的运算功能,第15章 位运算,15.1 位运算符 1数在计算机中的存放形式 (1)字和字节 (2)原码 (3)补码 2位运算符所谓位运算是指进行二进制位的运算。语言提供了六种位运算符,说明: (1)位运算符中除以外,都是二元运算符,即要求运算符两侧各有一个运算量(操作数)。 (2)位运算只能作用于整型或字符型数据,不能是实型数据。 (3)位运算符的优先性从高到低的顺序为:“”“、=、&=、=和|=。其功能如表15.2所示。 (5)两个长度不同的数据进行位运算时,系统先将二者最低位(最右位)对齐,然后将短的一方按符号位扩充,无符号数则以0扩充。,表
2、15.1 C语言中的位运算符,说明: (1)位运算符中除以外,都是二元运算符,即要求运算符两侧各有一个运算量(操作数)。 (2)位运算只能作用于整型或字符型数据,不能是实型数据。 (3)位运算符的优先性从高到低的顺序为:“”“、=、&=、=和|=。其功能如表15.2所示。 (5)两个长度不同的数据进行位运算时,系统先将二者最低位(最右位)对齐,然后将短的一方按符号位扩充,无符号数则以0扩充。,15.2 位运算符的运算功能 1位逻辑运算符 (1)位与运算符(&)。 (2)位或运算符(|)。 (3)异或运算符()。 (4)取反运算符()。,与运算符参与运算的数以补码方式出现。 例如:9&5并不等于
3、14,而应该是按位与,算式如下:00001001 (9的二进制补码)& 00000101 (5的二进制补码)00000001 (1的二进制补码),或运算符参与运算的两个数均以补码出现。 例如:9|5可写算式如下:00001001| 0000010100001101 (十进制为13),异或运算符参与运算数仍以补码出现。例如95可写成算式如下:00001001 0000010100001100 (十进制为12)取反运算符例如9的运算为: (0000000000001001) = 1111111111110110,2位移位运算符 (1)左移运算符()。 3位自反赋值运算 &=(自反位与运算) 如:a
4、&=b 相当于a=a&b。 |=(自反位或运算) 如:a|=b 相当于a=a|b。 =(自反右移位运算)如:a=b 相当于a=ab。 =(自反左移位运算)如:a=b 相当于a=b。 =(自反异或运算) 如:a=b 相当于a=ab。,4位运算符的优先级 (1)位反()运算符为单目运算符,优于所有的双目运算符和三目运算符。 (2)位移位运算符优先级相同,比算术运算符的优先级低,比关系运算符的优先级高。 (3)位逻辑运算符的优先级比关系运算符的优先级低,比逻辑运算符的优先级高。 (4)3个位逻辑运算符的优先次序为:& 优于 优于 |。 (5)位自反值运算符和赋值运算符、算术自反值运算符是同级的。,5位数不同的运算数之间的运算规则位运算的对象可以是整型和字符型数据。当两个运算数类型不同时位数也会不同。此时,系统将自动进行如下处理: (1)先将两个运算数右端对齐。 (2)再将位数短的一个运算数往高位扩充,即无符号数和正整数左侧用0补全;负数左侧用1补全;然后对位数相等的两个运算数按位进行运算。,