第11章 位运算.pptx

上传人:春哥&#****71; 文档编号:15608514 上传时间:2022-05-13 格式:PPTX 页数:28 大小:1.63MB
返回 下载 相关 举报
第11章 位运算.pptx_第1页
第1页 / 共28页
第11章 位运算.pptx_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《第11章 位运算.pptx》由会员分享,可在线阅读,更多相关《第11章 位运算.pptx(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、课程主讲人:第11章 位运算2 第 11章 位运算C语言程序设计第11章 位运算计算机教研室3 第 11章 位运算11.1 位运算符nC语言的位运算符分为两类,只有一个操作数的单目运算符和有左、右两个操作数的双目运算符,程序设计中常见的位运算符有6种,如表11-1所示。表11-1 C语言中的位运算符位运算符种类运算符含义应用形式运算功能优先级逻辑位运算按位取反aa按位取反14&按位与a&ba与b按位与8|按位或a|ba与b按位或6按位异或aba与b按位异或7移位位运算 按位左移a 按位右移b3b右移3位114 第 11章 位运算11.2 位运算程序中的所有数在计算机内存中都是以二进制的形式储存

2、的,连续的8个二进制构成一个字节,一个字节只能存储一个ASCII字符,不同数据类型的变量占用不同字节数的存储单元。位运算只能用于整型操作数,操作数的数据类型有char、short、int、long以及无符号的unsigned char、unsigned short、unsigned int、unsigned long类型。通常情况下,位运算的操作作用于unsigned类型的整数。逻辑位运算有四种:按位取反,按位与,按位或和按位异或。移位位运算有两种:按位左移,按位右移。5 第 11章 位运算11.2 位运算按位取反,这是一个单目运算符,用来对二进制的每一位取反,即将1变成0,将0变成1。例如,

3、下面的语句:int i=86printf(i=%dn,i);语句执行结果为:i=-87具体演算过程如下:i的值(86)10=(0000000001010110)2按位取反后i的值(86)102 按位取反后,最高位为1,表示为负数。计算机中负数是以补码的形式存放的,(11111111 10101001)2的补码为它的真值。补码反码+12+12 =(-87)10所以当int i=86时,2 =(-87)10按位取反运算11.2 位运算6 第 11章 位运算11.2 位运算例如,下面的语句:unsigned int i=86printf(i=%un,i);语句执行结果为:i=-65449具体演算过程

4、如下:i的值(86)10=(0000000001010110)2按位取反后i的值(86)102因为i为无符号型,所以i的值就是按位取反后的值:2=(65449)2按位取反运算11.2 位运算7 第 11章 位运算11.2 位运算【例11.1】阅读以下程序,了解不同类型的变量进行按位取反运算的规则。#include #include #include void main()inta=100,b=-100,c=32767,d=-32767;unsigned int e=100,f=0,g=65535;printf(a=%d,a=%dn,a,a);printf(b=%d,b=%dn,b,b);pri

5、ntf(c=%d,c=%dn,c,c);printf(d=%d,d=%dn,d,d);printf(e=%u,e=%un,e,e);printf(f=%u,f=%un,f,f);printf(g=%u,g=%un,g,g);按位取反运算11.2 位运算8 第 11章 位运算按位与运算,当两个操作对象二进制数的相同位都为1时,结果数值的相应位为1,否则相应位为0。其计算结果如表11-2所示。按位与运算位1位2表达式运算结果000&00010&10101&00111&11表11-2 按位与运算的结果11.2 位运算9 第 11章 位运算3.2 格式的输入/ 输出例如,对于如下语句:unsigned

6、 int a=146,b=222;printf(a&b=%un,a&b);语句执行结果为:a&b=146具体演算过程如下:a=(146)10=(0000000010010010)2,b=(222)10=(0000000011011110)2 0000000010010010 & 0000000011011110 a&b= 0000000010010010 所以a&b=(0000000010010010)2 =(146)10按位与运算11.2 位运算10 第 11章 位运算3.2 格式的输入/ 输出例如,对于如下语句:unsigned int a=146,b=222;printf(a&b=%un

7、,a&b);语句执行结果为:a&b=146具体演算过程如下:a=(146)10=(0000000010010010)2,b=(222)10=(0000000011011110)2 0000000010010010 & 0000000011011110 a&b= 0000000010010010 所以a&b=(0000000010010010)2 =(146)10按位与运算11.2 位运算11 第 11章 位运算3.2 格式的输入/ 输出例如,对于如下语句:unsigned int a=146,b=222;printf(a&b=%un,a&b);语句执行结果为:a&b=146如果将b的值取为负值

8、,int a=146,b=-222,则a&b的结果为2具体演算过程如下:a = ( 1 4 6 )1 0= ( 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 )2,b=(222)10=(0000000011011110)2 0000000010010010 & 0000000011011110 a&b= 0000000010010010 所以a&b=(0000000010010010)2 =(146)10按位与运算具体演算过程如下:b|原码=(-222)10b|补码=(-222)10那么a&b就成为: 0000000010010010 a&b= 000000000000001

9、0所以a&b=2。11.2 位运算12 第 11章 位运算3.2 格式的输入/ 输出【例11.2】编写程序,从键盘输入一个unsigned整型数,将数据低位字节的值取出来。#include void main()unsigned int a,b=255,c;printf(请输入变量a的值:);scanf(%u,&a);c=a&b;printf(%u&%u=%un,a,b,c);按位与运算11.2 位运算13 第 11章 位运算3.2 格式的输入/ 输出按位或运算,当两个操作对象二进制数的相同位都为0时,结果数值的相应位为0,否则相应位是1。其计算结果如表11-3所示。表11-3 按位或运算的结

10、果按位或运算位1位2表达式运算结果000|00010|11101|01111|1111.2 位运算14 第 11章 位运算3.2 格式的输入/ 输出例如,对于如下语句:unsigned int a=146,b=222;printf(a|b=%un,a|b);语句执行结果为:a|b=222如果将b的值取为负值,int a=146,b=-222,则a|b的结果为-78。具体演算过程如下:a=(146)1 0=(0000000010010010)2,b=(222)10=(0000000011011110)2 0000000010010010 | 0000000011011110 a|b= 00000

11、00011011110所以a|b=(0000000011011110)2=(222)10按位或运算11.2 位运算15 第 11章 位运算3.2 格式的输入/ 输出按位或运算具体演算过程如下:b|原码=(-222)10b|补码=(-222)10那么a&b就成为: 0000000010010010 这时,最高位为1,表示按位或运算后为负数,负数以补码的形式存放,因此的补码为它的真值。补码反码+12+12 =(-78)10所以当int a=146,b=-222时,则2 =(-78)1011.2 位运算16 第 11章 位运算3.2 格式的输入/ 输出按位或运算【例11.3】编写程序,从键盘输入一个

12、unsigned整型数,将数据低字节的值改为1。#include void main()unsigned int a,b=225,c;printf(请输入变量a的值:);scanf(%u,&a);c=a|b;printf(%u|%u=%un,a,b,c);11.2 位运算17 第 11章 位运算3.2 格式的输入/ 输出按位异或运算按位异或运算,当两个操作对象二进制数的相同位的值相同时,结果数值的相应位为0,否则为相应位是1。其计算结果如表11-4所示。表11-4 按位异或运算的结果位1位2表达式运算结果0000001011101011111011.2 位运算18 第 11章 位运算3.2 格

13、式的输入/ 输出例如,对于如下语句:unsigned int a=146,b=222;printf(ab=%un,ab);语句执行结果为:ab=76具体演算过程如下:a=(146)10=(0000000010010010)2,b=(222)10=( 0000000011011110)2 0000000010010010 0000000011011110 ab= 0000000001001100所以ab=(0000000001001100)2 =(76)10按位异或运算11.2 位运算19 第 11章 位运算3.2 格式的输入/ 输出如果将b的值取为负值,int a=146,b=-222,则ab

14、的结果为-80。具体演算过程如下:b|原码b|补码那么a&b就成为: 0000000010010010 这时,最高位为1,表示按位异或运算后为负数,负数以补码的形式存放,因此2的补码为它的真值。补码反码+12+12=(-80)10所以当int a=146,b=-222时,则2 =(-80)10按位异或运算11.2 位运算20 第 11章 位运算3.2 格式的输入/ 输出【例11.4】从键盘输入两个整型数,编写程序,交换两个变量的值。#include void main()int a,b,c;printf(请输入变量a,b的值:);scanf(%d%d,&a,&b);c=ab;printf(c=

15、%dn,c);a=ab;b=ba;a=ab;printf(a=%d,b=%dn,a,b);按位异或运算11.2 位运算21 第 11章 位运算3.2 格式的输入/ 输出按位左移运算,把操作对象的二进制数向左移动指定的位,并在右面补上相应的0,高位溢出则丢弃。左移运算的表达式为: mn; 即将m的二进制位全部左移n位,右边空出的位补零。按位左移运算11.2 位运算例如,有如下语句:unsigned int m=75;printf(m2=%un,m2);该语句执行结果为:m2=30022 第 11章 位运算3.2 格式的输入/ 输出例如,对于下面的语句:int m=-75;printf(m1=%u

16、n,m1);该语句执行结果为:m1=-150按位左移运算11.2 位运算23 第 11章 位运算3.2 格式的输入/ 输出i=1615;printf(1615=%dn,i);i=-1615;printf(-1615=%dn,i);printf(变量为无符号的整型数:n);u=203;printf(203=%un,u);u=1115;printf(1115=%un,u);u=1615;printf(1615=%un,u);按位左移运算11.2 位运算【例11.5】阅读以下程序,掌握按位左移运算的规则。#include void main()int i;unsigned int u;printf(

17、变量为有符号的整型数:n);i=103;printf(103=%dn,i);i=-103;printf(-103=%dn,i);i=1115;printf(1115=%dn,i);i=-1115;printf(-11n;即将m的二进制位全部右移n位,其中,m和n均为整型,且n的值必须为正整数。按位右移运算11.2 位运算25 第 11章 位运算例如,有如下语句:int m=75;printf(m2=%dn,m2);该语句执行结果为:m2=18按位右移运算11.2 位运算26 第 11章 位运算例如,对于下面的语句:int m=-75;printf(m1=%dn,m1);该语句执行结果为:m1=

18、-38按位右移运算11.2 位运算27 第 11章 位运算#include void main()int i;unsigned int u;printf(有符号的整型变量:n);i=203; printf(1-(203)=%dn,i);i=-203; printf(2-(-203)=%dn,i);i=2517; printf(3-(2517)=%dn,i);i=-25-3; printf(4-(-25-3)=%dn,i);i=3215; printf(5-(3215)=%dn,i);i=-3215; printf(6-(-3215)=%dn,i);printf(无符号的整型变量:n);u=253;printf(7-(253)=%un,u);u=1715; printf(8-(1715)=%un,u);u=1815; printf(9-(1815)=%un,u);按位右移运算11.2 位运算28 第 11章 位运算前面所讲的五种双目位运算符和赋值运算符结合后可以组成复合位运算赋值运算符,具体如表11-5所示。表11-5 复合位运算赋值运算符复合位运算赋值运算符11.2 位运算运算符表达式等价的表达式&=a&=ba=a&b|=a|=ba=a|b=a=ba=ab=a=ba=a=a=ba=ab

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com