收藏 分享(赏)

C语言第11章 位运算.ppt

上传人:gnk289057 文档编号:6103408 上传时间:2019-03-27 格式:PPT 页数:21 大小:185.50KB
下载 相关 举报
C语言第11章 位运算.ppt_第1页
第1页 / 共21页
C语言第11章 位运算.ppt_第2页
第2页 / 共21页
C语言第11章 位运算.ppt_第3页
第3页 / 共21页
C语言第11章 位运算.ppt_第4页
第4页 / 共21页
C语言第11章 位运算.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、C语言第11章 位运算,哈尔滨理工大学 计算中心,Page 2,二、八、十、十六进制换算表,Page 3,位运算,计算机中的信息是以二进制0、1存储的 每个0或1称为一个“位“(bit) 在C语言中提供了对二进制位(bit)的直接操作,使C具有了某些汇编语言才有的功能,Page 4,位运算符,C语言的位运算符有以下几个 & 按位“与“ | 按位“或“ 按位“异或“ 按位取反 右移,Page 5,位运算符说明,位运算的对象只能是int或char 位运算是对每一个二进制位分别进行操作,每个字节(byte)是8个二进制位(bit),以前所进行的所有变量操作均以字节为基本单位 “为单目运算符,其他均为

2、双目运算符 按运算符优先级顺序由高到底排列为: , , &, , | 优先级相同 也可以使用如“&=“或“|=“等简写形式,Page 6,按位与运算(&),“与“运算的规则如下:,a 0 0 1 1,b 0 1 0 1,a&b 0 0 0 1,与“乘法“类似,Page 7,“与“运算举例,unsigned int a1=077,a2=0150; printf(“%o“,a1,a1=0177即二进制的00000000 00111111 a2=0177即二进制的00000000 01101000 &,00000000 00101000,即八进制的050,Page 8,按位或运算(|),“或“运算的

3、规则如下:,a 0 0 1 1,b 0 1 0 1,a|b 0 1 1 1,与“加法“类似,Page 9,“或“运算举例,unsigned char a1=0x07,a2=0xd0; printf(“%x“,a1|a2);,a1=0x07即二进制的 00000111 a2=0xd0即二进制的 11100000 |,11100111,即十六进制的0xd7,Page 10,按位异或运算(),“异或“运算的规则如下:,a 0 0 1 1,b 0 1 0 1,ab 0 1 1 0,a,b值相异结果为1,否则结果为0,Page 11,“异或“运算举例,unsigned char a1=0x20,a2=0

4、x35; printf(“%x“,a1a2);,a1=0x07即二进制的 00100000 a2=0xd0即二进制的 00110101 ,00010101,即十六进制的0x15,Page 12,按位取反运算(),“取反“运算的规则如下:,a 0 1,a 1 0,“1“变成“0“,“0“变成“1“,Page 13,“取反“运算举例,unsigned char a1=0x20; printf(“%x“,a1);,a1=0x07即二进制的 00100000 ,11011111,即十六进制的0xdf,Page 14,左移运算(),“左移“运算的格式如下: 表达式1表达工2 表达式1为移位的对象,表达式

5、2为移位的位数 左移后,右边的空位补“0“ 左移一位相当于将操作数乘以2,Page 15,左移运算举例,unsigned char a1=0x12; printf(“%x“,a13);,a1=0x07即二进制的 00010010 3 左移三位后变为: 00010010000,即十六进制的0x90,舍掉,补0,Page 16,右移运算(),“右移“运算的格式如下: 表达式1表达工2 表达式1为移位的对象,表达式2为移位的位数 对于无符号数,右移后,左边的空位补“0” 对于带符号数,若符号位为0,右移后,左边的空位补“0”;若符号位为1,右移后,左边的空位补“0”或补“1”随计算机系统不同,补“0

6、”的称为逻辑右移,补“1”的称为算术右移,Page 17,右移运算举例,unsigned char a1=0x12; printf(“%x“,a13);,a1=0x07即二进制的 00010010 3 右移三位后变为: 00000010010,即十六进制的0x02,舍掉,补0,Page 18,位运算应用举例,取一整数从右端开始的47位。,&,Page 19,位运算应用举例-续,低4 位为1,其余为0的数:,整个程序的表达式为: (a4)&(04),Page 20,位域(bit field),C语言允许在一个结构体中以位为单位来指定其成员所占内存的长度,称为位域(bit field) 例: st

7、ruct packed _data unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; data; 此时,变量data的各个成员中,a,b,c,d分别占2位、6位、4位、4位,i占16位,整个data占的空间为4bytes 当位域成员所占空间不足一个字节时,系统自动将空余部分闲置不用,Page 21,位域说明,位域成员的类型只能为unsigned 或int 在存储单元中,位域的分配方式因机器而异,可不关心 位域可当做整型变量使用,但要注意位域表示数值的范围,如两位二进制的范围为03,三位二进制的范围为07 不能定义位域数组 位域可按整型量的形式加参运算或赋值、输出,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报