第十二章C语言.ppt
上传人:sy****28 上传时间:2024-09-10 格式:PPT 页数:16 大小:107KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

第十二章C语言.ppt

第十二章C语言.ppt

预览

免费试读已结束,剩余 6 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十二章位运算12.1概述12.2位运算符12.3位运算举例12.4位段§12.1概述C语言具有高级语言的特点,又具有低级语言的特点。因此它能实现某些高级语言不能实现的功能,例如本章所涉及的位运算,它使C语言的用途大大扩展,运用更加灵活。位运算是指进行二进制位的运算。一.字节(byte)和位(bit)一个字节一般由8个二进制位组成.在微型机中一般以4个字节存放一个实数,以2个字节存放一个整数.二.原码、反码、补码原码:只将最高位作符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值.反码:正数的反码同原码相同,负数的反码,最高位符号位为1,其余各位是对原码取反.补码:正数的补码同原码相同,负数的补码,最高位符号位为1,其余各位是对原码取反,再在最低位加1.§12.2位运算符运算符含义&按位与¦按位或^按位异或~取反<<左移>>右移“按位与”(&)如果参加运算的两个二进制数位都为1,则按位与的结果值为1,否则为0。0&0=00&1=01&0=01&1=1用途:1.清零:若要将一个数的所有位清零,只需找一个新数,使之与原来的数中为1的数位相对应的数位为0,然后使二者进行&运算。2.获取一个数中的某些指定位的值:找一个数,此数的指定位为1,其余都为0。然后使二者进行&运算。“按位或”(¦)两个运算数位中只要有一个为1,则按位或的结果值为1,否则为0。如:0¦0=01¦0=10¦1=11¦1=1用途:1.将一个数的全部数位置1;2.将一个数的某些指定位置1:找一个新数,使之指定位数位为1,其余为0,然后使二者按位相或。“异或”(^)如果参加异或运算的两个数位位同号,则运算结果为0,两个数位异号则结果为1。如:0^0=01^0=10^1=11^1=0用途:1.使某数的指定数位翻转:将与其进行^运算的新数中的与指定位相对应的数位置为1,其余数位为0。2.保持某数的指定数位不变:不论0或1,当与0相^时,值保持不变。3.交换两个数的值,不用临时变量:a=a^b;b=b^a;a=a^b;“取反”(~)此运算符是一个单目(元)运算符,对一个二进制数按位取反。如:inta=21;~(0000,0000,0001,0101)(1111,1111,1110,1010)若要使b的最后一位为0:b=b&~1=b&~(0000,0000,0000,0001)左移运算符(<<)作用是将一个数的所有二进制数位全部左移若干位。左移位数必须为整数。高位左移出后舍弃,低位补0。用途:1.放大2的n次幂倍:左移n位,相当于该数乘以2的n次幂。但此结论只适用于该数左移时舍弃的高位中不包含1的情况,如果包含1,则为溢出。2.将左边若干位去除。右移运算符(>>)将一个数的所有二进制数位全部右移若干位。在右移时要注意符号问题。用途:1.去除某数最右边的若干数位:低位移出的丢弃,高位补0。2.某数缩小2的n次幂倍:正数右移时最高位补0;负数右移时最高位补1。可构成多种复合赋值运算符§12.3位运算举例1.取一个整数a从右端开始的4~7位.main(){unsigneda,b,c,d;scanf(“%x”,&a);b=a>>4;c=~(~0<<4);d=b&c;printf(“%x\n%x\n”,a,d);}若指定从右面m位开始取其右面n位,只须将程序中的“b=a>>4”改为“b=a>>(m-n+1)”,将程序中的“c=~(~0<<4)”改为“c=~(~0<<n)”即可。2.要求将一个int整数a进行循环右移。main(){unsigneda,b,c,d;/*inta,b,c,d;*/intn;scanf(“%x,%d”,&a,&n);b=a<<(16-n);c=a>>n;c=c|b;printf(“%x,%x”,a,c);}§12.4位段定义:位段是以位为单位定义长度的结构体类型中的成员。例如:structpacked_data{unsigneda:2;unsignedb:6;unsignedc:4;unsignedd:4;inti;}data;位段定义和引用的说明:第十二章结束