文档介绍:实用C语言程序设计教程
Visual C++
模块7 位运算与文件
任务1 位运算
学习目标
掌握六种位运算的运算符与格式、运算规则。
案例讲解
案例1 二进制的循环移位
实现二进制的循环移位。设待移位的数为a,移位情况如图7-1,设系统中2个字节存放一个整数。
-1 二进制的循环移位图解
该问题的要求在于将待移位数a分成两部分,然后交换这两部分的位置。从而可知,需要增加两个变量存储变量a的两部分的值,而这些操作都需要求助于位运算。程序描述如下:
main ( )
{
定义无符号整型变量a,b,c
定义整型变量n
输入待移位数a和所移动位数n
对数a左移16-n位后的结果给变量b
对数a右移n位后的结果给变量c
对变量b,c做按位或运算,计算结果给变量c
输出变量a和c
}
n位
n位
图7-1 二进制的循环移位图解
/* */
#include <>
main( )
{
unsigned short unsignedA, unsignedB, unsignedC;
int intN;
printf("请输入一个无符号整型变量unsignedA的值:");
scanf("%u",& unsignedA);
printf("请输入移位位数intN的值:");
scanf("%d",& intN);
unsignedB = unsignedA <<(16–intN);
unsignedC = unsignedA >> intN;
unsignedC = unsignedC | unsignedB;
printf("unsignedA的值:%o\n", unsignedA);
printf("unsignedC的值:%o\n", unsignedC);
}
图7-2 案例1运行结果
在本案例中,使用了左移位运算、右移位运算和按位或运算相配合,实现二进制的循环移位。
该程序运行的一个实例,输入unsignedA的值为174,移动位数intN的值为2,则运行结果如图。其中:十进制数174(即为八进制数256)的二进制数为0000000010101110(按题设要求为2个字节),循环移动2位,则循环移位后的二进制结果为1000000000101011(即为八进制数100053)。
基础理论
C语言中提供给开发人员一种位的运算,这种位的运算常用在检测和控制领域中,这和C语言的特性关系非常大,因为C语言是具有高级语言的特点和低级语言的功能,能完成一些汇编语言所能完成的功能。给开发人员提供了一定的简便。
C语言提供了六种位运算,下面分别介绍。
(&)
(1) 格式:x&y
(2) 规则:按位与运算符“&”是双目运算符。其功能是参加运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,
否则为0。参加运算的数以补码方式出现。
例如:9&5可写算式如下
00001001
& 00000101
00000001
结果为:9&5=1。
(3) 主要用途:用来对某些位清0或保留某些位。
例如:把a 的高八位清0,保留低八位,可作 a&255 运算(255 的二进制数为0000000011111111)。