C语言课件-位运算.ppt
C语言程序设计,信息工程学院 施莹 2019年11月,第12章 位运算,C语言是为描述系统而设计的,其功能应当具有汇编的功能 故C语言具有高级语言的的功能,也肯定低级语言的功能。 具有低级语言的功能主要表现在对位的操作上。,12.1 位运算符和位运算,说明 1位运算符中除 以外,均为二目元运算符,即要求两侧各有一个运算量。 2运算量只能是整型或字符型的数据,不能为实型数据。,“按位与”运算符() 与运算的规则000 010 100 111,00000100,按位与运算的作用 清零 要求符合的条件原来的数中为1的位,新数中相应位为0,取出指定位 只要在指定位处取1 保留数中的某几位 只要在对应的保留数位处取1,例a 00 10 11 00 10 10 11 00 b00 00 00 00 11 11 11 11,c00 00 00 00 10 10 11 00按位或运算“|” 或运算规则0|00 0|11 1|0 1 1|11,按位或的作用将指定位置“1”,00000101,例a 00 10 11 00 10 10 11 00 | b00 00 00 00 11 11 11 11,c 00 10 11 00 11 11 11 11异或运算符“ “ 异或运算的规则000 011 101 110,00000001,按位异或运算的作用 使特定位翻转 011 110,例 编程实现求无符号数a的相反数 。 unsigned int a; aa0 xffff aiint,取出指定位 000 101,例取出整型变量a的低8位 int a; aa0 x0000;,例假设有a01111010,使其低4位翻转。 01111010 00001111,01110101交换两个值,不用临时变量,程序举例,例 将整型数a、b相互交换,不使用临时变量,include main int x,y; printf“Enter integers x and yn“; scanf“d,d“, ,x011 y100 x111 y100 y011 x111 x100,取反运算符 异或运算的规则01 10,11111010,右移运算符 右移运算的规则右边的舍弃 对于无符号数,左边补“0” 对于有符号数,左边补最高位,例 unsinged 52 00000101 00000001 右移相当于/2左移运算符 左移运算的规则左边的舍弃,右边补“0”,例 52 00000101 00010100 左移一位相当于*2,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符 如,|,,, 例如ab aab a2 aa2,12.2 位运算举例,例1取一个整数a从右端开始的47位。,先使a右移4位,设置一个低4位全位1,其余全为0的数。 04,将上面两者进行运算 a4 04,a4,程序实现 main unsigned a,b,c,d; scanf“o”例2循环移位。要求将a进行右循环移位。见图,将a的右端n位先放到b中的高位n位中。 ban 将c与b进行按位或运算。 cc|b,程序实现 main unsigned a,b,c; int n; scanf“ao,nd”今 天 作 业 题,1、变量a、b均被声明为短整型short int类型,分别写出执行下列语句后a,b的值。 1a4;b5;a,