【文档说明】C语言程序设计实例教程课件11.ppt,共(13)页,282.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44538.html
以下为本文档部分文字说明:
第11章位运算11.1位运算符11.2位运算符的运算功能位运算是指进行二进制位的运算。11.1位运算符计算机中的位运算是针对二进制代码进行的。每一个二进制位的取值只有0或1。位运算符的操作对象是一个二进制位的集合,如一个字节(8bit)。位运
算符共有6种,即~、<<、>>、&、^和|,分别表示按位取反、左移位、右移位、按位与、按位异或、按位或,见表11-1。表11-1位运算符运算符名称使用格式~按位取反~表达式<<左移位表达式1<<表达式2>>右移位表达式1
>>表达式2&按位与表达式1&表达式2^按位异或表达式1^表达式2|按位或表达式1|表达式2按位操作的情况,见表11-2,其中a和b分别表示一个二进制位。表11-2按位逻辑运算ab~aa&ba^ba|b00100001101110001111010111.1.1按位取反按位取反
运算符就是将其操作对象中的所有二进制位全部改变状态,即“逢0变1,逢1变0”。11.1.2移位移位运算符有左移运算符和右移运算符。1.左移运算符左移运算符是将其操作对象向左移动指定的位数,每左移1位相当于
乘以2,移n位相当于乘以2的n次方。一个二进制位在左移时右边补0,移几位右边补几个0。左移运算符的一般书写格式为:表达式1<<表达式22.右移运算符右移运算符是将其操作对象向右移动指定的位数,每右移1位相当于除以2,移n位相当于除以2的n次方。在进行右移时,右边移出的二进制位被舍弃。右移运算符的一
般书写格式为:表达式1>>表达式211.1.3按位“与”按位“与”的一般书写格式为:表达式1&表达式2按位“与”的运算原则为:当两个操作对象的相应二进制位都为1时,则该位的结果为1,否则为0,即“两1为1,其余为0”。11
.1.4按位“或”按位“或”的一般书写格式为:表达式1|表达式2按位“或”的运算原则为:当两个操作对象的相应二进制位都为0时,则该位的结果为0,否则为1,即“两0为0,其余为1”。11.1.5按位“异或”按位“
异或”的一般书写格式为:表达式1^表达式2按位“或”的运算原则为:当两个操作对象的相应位相同时,则该对应位的结果为0,否则为1,即“相同为0,不同为1”。按位“异或”也可以称不进位加,即两个操作对象执行二进制相加,但
不向高位进位。11.2位运算符的运算功能【例11-9】将整型数据n的后5位数据置为0,其余各位不变。程序如下:#include<stdio.h>main(){intn;printf("inputn:");scanf("%d",&n);n&=~037;printf("%d\n",n);}【例1
1-10】实现向左循环移位。程序如下:#include<stdio.h>main(){unsigneda,b,c;intn;printf("inputa:");scanf("%o",&a);printf("inputn:");scanf("%d",&n);b=a>>(16-n);c=a<<
n;a=b|c;printf("%o\n",a);}第11章位运算【例11-11】将一个整型数据的各位倒序输出。程序如下:#include<stdio.h>main(){unsigneda,b;inti;printf("inpu
ta:");scanf("%o",&a);b=0;for(i=0;i<16;i++){b=b<<1;b=(a&(1<<i))>>i|b;}printf("%o\n",b);}第11章位运算【例11-12】取一个单元a的某几位到另一个单
元b。程序如下:#include<stdio.h>voidyiwei(pa,pb,st1,st2,n1)unsigned*pa,*pb;intst1,st2,n1;{unsignedc,d;intmove;move=st1-st2;c=~(~0<
<n1)<<(17-st1-n1);d=~(~(~0<<n1)<<(17-st2-n1));if(move>0)*pb=(c&*pa)<<move|(*pb&d);else*pb=c&*pa>>(-move)|(
*pb&d);}第11章位运算main(){inta1,b1,n;unsigneda,b;printf("inputa:\n");scanf("%o",&a);printf("inputb:\n");scanf
("%o",&b);printf("inputthestartnuma1:\n");scanf("%d",&a1);printf("inputthestartnumb1:\n");scanf("%d",&b1);printf("inputnumberofthebits:\n");scanf(
"%d",&n);yiwei(&a,&b,a1,b1,n);printf("%o\n%o\n",a,b);}第11章位运算返回章目录