任务八、执行位运算计算
这个任务要求编写一个能执行双目位运算计算的程序。其运行时截图类似:
位运算包括单目位运算和双目位运算两大类,分别对一个操作数及两个操作数进行按位运算。
单目位运算符仅一个按位取反~。这个运算符将构成一个数的每个二进制位1变为0、0变为1。例如:
~01001101 = 10110010
本实验任务不讨论单目位运算。
双目位运算符包括按位与&、按位或|、按位异或^以及按位左移<<、按位右移>>共5种。如以上截图所示,这个程序对两个数进行&、|及^运算,然后对另外两个数进行<<、>>运算。您应该通过这个案例好好琢磨清楚这些运算是怎么回事!
现在,请参考以上截图及如下要求或说明编写程序。
- 创建一个C程序项目,项目名称应类似“xxx”,C语言源文件名称应类似“xxx.C”,程序应保存在“你的文件夹”内!
- 编写双目位运算计算函数bitoperate
- 函数名称:bitoperate
- 函数参数:两个短整型参数a和b,表示要进行位运算的两个数;一个字符型参数c,表示要进行哪一种运算,该参数的值为&、|、^、<、>,分别表示要进行按位与&、按位或|、按位异或^、按位左移<<、按位右移>>5种运算
- 函数返回类型:短整型数的运算结果当然也是短整型,因此,函数的返回类型应声明为短整型
- 函数功能:通过switch语句判断字符型参数c的值,并分别对短整数a和b进行所要求的位运算,最后通过return语句返回运算结果
- 编写显示一个数的二进制形式的函数printbinary
- 函数名称:printbinary
- 函数参数:仅一个短整型参数n,这个参数表示要以二进制形式显示的短整数
- 函数返回类型:仅仅只是显示短整数的二进制形式,无需返回值,因此返回类型应定义为void
- 函数功能:通过for循环语句,结合使用&、<<及唯一的三目运算符?:逐一显示短整数n中的每一位(您应该记得,短整数是用16个二进制位来表示的)。明白一点,假设参数n是短整数100(十进制),那么这个函数将显示如下16个二进制0000000001100100
- 在程序中按如下要求编写main函数
- 声明两个短整型变量x和y
- 给x、y分别赋值6289、169
- 依次调用printformulas函数分别对x、y执行&、|、^运算
- 给x、y分别赋值100、3
- 依次调用printformulas函数分别对x、y执行<<、>>运算,将x(100)分别左移、右移y(3)位
- 别忘记写system(“pause”)语句让程序暂停下来以看清楚运行结果!
- 运行并调试程序,确保程序正确无误!
通过watches窗口观察变量里的数据变化情况,将截图贴在实验结果处,并分析原因。
因为题目要求是这样,则可以知道代码(面向结果型)(要随意改数值的话改下代码就好)
#include <stdio.h>
#include <stdlib.h>
short bitoperate(short a, short b, char c)
{
switch(c)
{
case '&':
return a & b;
case '|':
return a | b;
case '^':
return a ^ b;
case '<':
return a << b;
case '>':
return a >> b;
default:
printf("无效的运算符!\n");
return 0;
}
}
void printbinary(short n)
{
for(int i=15; i>=0; i--)
{
printf("%d", (n&(1<<i))?1:0);
}
printf("\n");
}
int main()
{
short bitoperate(short a, short b, char c);
void printbinary(short n);
short x, y;
x = 6289;
y = 169;
printf(" \t");
printbinary(x);
printf("& \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '&'));
printf("\n");
printf(" \t");
printbinary(x);
printf("| \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '|'));
printf("\n");
printf(" \t");
printbinary(x);
printf("^ \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '^'));
printf("\n");
printf(" \t");
printbinary(x);
printf("<<\t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '<'));
printf("\n");
printf(" \t");
printbinary(x);
printf(">>\t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '>'));
printf("\n\n\n\n\n\n\n");
x = 100;
y = 3;
printf(" \t");
printbinary(x);
printf("& \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '&'));
printf("\n");
printf(" \t");
printbinary(x);
printf("| \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '|'));
printf("\n");
printf(" \t");
printbinary(x);
printf("^ \t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '^'));
printf("\n");
printf(" \t");
printbinary(x);
printf("<<\t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '<'));
printf("\n");
printf(" \t");
printbinary(x);
printf(">>\t");
printbinary(y);
printf("= \t");
printbinary(bitoperate(x, y, '>'));
printf("\n");
system("pause");
}
这仅作保存学习的记录