1 / 20

第 9 章 位运算

第 9 章 位运算. 9.1 移位运算符 9.2 按位与、或、异或运算符 9.3 按位取反运算符. 例题链接. 返回. 9.1 移位运算符. P282. 位运算 —— 对二进制位进行的运算 位运算只能对 整型 或 字符型 进行. 高. 低. 左移运算符  (<<). 将一个操作数的各二进制位全部向左移动指定的位数。左移后,右边空出来的位置补 0 ,左边移出的位舍去。其一般格式为: 操作数 1 << 操作数 2 其中“操作数 1” 是被左移的操作数,“操作数 2” 是左移的位数。. 右移运算符  (>>).

Download Presentation

第 9 章 位运算

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第9章 位运算 9.1 移位运算符 9.2 按位与、或、异或运算符 9.3 按位取反运算符 例题链接

  2. 返回 9.1 移位运算符 P282 • 位运算——对二进制位进行的运算 • 位运算只能对整型或字符型进行

  3. 左移运算符 (<<) • 将一个操作数的各二进制位全部向左移动指定的位数。左移后,右边空出来的位置补0,左边移出的位舍去。其一般格式为: • 操作数1 <<操作数2 • 其中“操作数1”是被左移的操作数,“操作数2”是左移的位数。

  4. 右移运算符 (>>) • 右移运算符(>>)的一般格式为: • 操作数1>>操作数2 • 其中“操作数1”是被右移的操作数,“操作数2”是右移的位数。 • 规则:将一个操作数的各二进制位全部向右移动指定的位数。右移后右边移出去的位舍去。左边的高位填补分两种情况。 ① 对无符号数,右移时高位补0。 ② 对有符号数,如果符号位为0(即正数),高位补0;如果符号位为1(即负数),则高位补1。这种补1以保持操作数原来的符号的方法称为“算术右移”,补0的称为“逻辑右移”。

  5. 【例9.1】移位运算符的示例 #include <stdio.h> main( ) { int a=9,b=-9,x=0,y=0,z=0; x=a<<3; y=a>>1; z=b>>1; printf("%d,%d,%d\n",x,y,z); } 左移3位 右移1位 对负数右移参见9.4.1节 72,4,-5

  6. a 0 0 0 a<<3 72(=a×23) a 0 a>>1 4(=a÷ 21)

  7. 9.2 按位与、或、异或运算符 1. 按位与运算符 (&) • 运算符“&”要求参加运算的两个操作数的各个位分别对应,按二进制位进行“与”运算。 • 按“位与”的一般格式为: 操作数1 &操作数2 其中“操作数1”和“操作数2”均为整型数据。 • 规则:如果两个操作数对应的二进制位都为1,则该位的运算结果为1,否则为0。即, 1&1=1 ; 1&0=0 ; 0&1=0 ; 0&0=0 ;

  8. 9.2 按位与、或、异或运算符 2.按位或运算符(|) • 运算符“|”要求参加运算的两个操作数的各个位分别对应,按二进制位进行“或”运算。 • 按按“位或”的一般格式为: 操作数1 | 操作数2 • 其中“操作数1”和“操作数2”均为整型操作数。 • 如果两个操作数对应的二进制位中只要有一个为1,则该位的运算结果为1,否则为0。即, 1|1=1 ; 1|0=1 ; 0|1=1 ; 0|0=0 ;

  9. 9.2 按位与、或、异或运算符 3.按位异或运算符(^) • 运算符“^”要求参加运算的两个操作数的各个位分别对应,按二进制位进行“异或”运算。 • 规则:两个操作数对应的二进制位相同,则该位的运算结果为0,对应位不同,则该位结果为1。即, • 0^0=0 ; 0^1=1 ; 1^0=1 ; 1^1=0 ;

  10. 返回 9.2 按位与、或、异或运算符 P284 【例9.2】示例 #include <stdio.h> main( ) { char a=5,b=11,x=0,y=0,z=0; x = a & b; y = a | b; z = a ^ b; printf("%d,%d,%d\n",x,y,z); } 按位与 按位或 按位异或 1,15,14

  11. 按位与运算 0 0 0 0 0 1 0 1 5 0 0 0 0 1 0 1 1 11 & 0 0 0 0 0 0 0 1 结果为1

  12. 按位或运算 0 0 0 0 0 1 0 1 5 | 0 0 0 0 1 0 1 1 11 0 0 0 0 1 1 1 1 结果为15

  13. 0 0 0 0 0 1 0 1 按位异或运算 5 0 0 0 0 1 0 1 1 11 ^ 0 0 0 0 1 1 1 0 结果为14

  14. 【例9.3】假设字符型变量a中存放的内容为11000001(二进制值),完成以下各功能【例9.3】假设字符型变量a中存放的内容为11000001(二进制值),完成以下各功能

  15. 将a的最高位置成0,其余的位不变 与最高位为0,其余位均为1的数进行按位与运算即可(a & 127) 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 & 0 1 0 0 0 0 0 1 最高位置0,其余不变

  16. 将a的各位置成0 与各位均为0的数进行按位与运算即可(a & 0) 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 & 0 0 0 0 0 0 0 0 各位变为0

  17. 将a的低两位置1,其余的位不变 与低两位为1,其余位均为0的数进行按位或运算即可(a | 3) 1 1 0 0 0 0 0 1 | 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 低两位置1,其余不变

  18. 将a的高四位不变,低四位翻转 与低四位为1,高四位为0的数进行按位异或运算即可(a ^ 15) 1 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 ^ 1 1 0 0 1 1 1 0 低四位置翻转,高四位不变

  19. 返回 9.3 按位取反运算符(~) P285 【例9.4】假设字符型变量a中存放的内容为01000001(二进制值),即为字符’A’,要求将位上的数字按1变为0,0变为1进行翻转 0 1 0 0 0 0 0 1 ~ 65 1 0 1 1 1 1 1 0 结果为190 对所有位进行翻转

More Related