第一题:
写一个程序,从键盘上接收一个整数,用二进制形式输出这个整数。
#include
#include
int main(void) {
int n,x=0,a[100];
printf("请输入需要转换的数:\n");
fflush(stdout);
scanf("%d",&n);
while(n){
a[x++]=n%2;
n/=2;
}
--x;
while(x>=0){
printf("%d",a[x--]);
}
return EXIT_SUCCESS;
}
第二题:
已知int x=5,y=3 求解下列表达式的值
!x, ~x, x&y, x&&y, x|y, x||y, x^y
#include
#include
int main(void) {
int x=5,y=3;
printf("!x=%d\n",!x);
printf("~x=%d\n",~x);
printf("x&y=%d\n",x&y);
printf("x&&y=%d\n",x&&y);
printf("x|y=%d\n",x|y);
printf("x||y=%d\n",x||y);
printf("x^y=%d\n",x^y);
return EXIT_SUCCESS;
}
第三题:
完成下列任务(手写需要步骤)
(1)求27&5
(2)求17|12
(3)求27&5
(4)求27^5
(5)求27<<5
(6)求27>>5
#include
#include
int main(void) {
int a=27,b=5,c=17,d=12;
printf("27&5=%d\n",a&b);
printf("17|12=%d\n",c|d);
printf("27&5=%d\n",a&b);
printf("27^5=%d\n",a^b);
printf("27<<5=%d\n",a< printf("27>>5=%d\n",a>>b);
return EXIT_SUCCESS;
}
第四题;
写一函数实现两个数的交换,交换变量利用位运算实现。
#include
#include
int main(void) {
void swap(int *a, int *b) {
*a = (*a) ^ (*b);
*b = (*a) ^ (*b);
*a = (*a) ^ (*b);
}
int main(void) {
int a, b;
printf("请输入两个整数:\n");
fflush(stdout);
scanf("%d%d", &a, &b);
printf("两个整数交换前:\n%d %d\n", a, b);
swap(&a, &b);
printf("两个整数交换后:\n%d %d\n", a, b);
return EXIT_SUCCESS;
}
第五题:
编写一个函数用来实现左右循环移位,函数名为move,调用方法为move(value,n)其中value为要循环位移
的数,
n为位移的位数。例如你n<0表示为左移;n>0为右移,n=4表示要右移4位,n=-3表示左移3位。
#include
#include
int main(void) {
unsigned moveright(unsigned, int);
unsigned moveleft(unsigned, int);
unsigned a;
int n;
printf("请输入要循环位移的数:\n");
fflush(stdout);
scanf("%d", &a);
printf("请输入要位移的位数:\n");
fflush(stdout);
scanf("%d", &n);
if (n > 0) {
moveright(a, n);
printf("结果为:%d\n", moveright(a, n));
} else {
n = -n;
moveleft(a, n);
printf("结果为:%d\n", moveleft(a, n));
}
return EXIT_SUCCESS;
}
unsigned moveright(unsigned value, int n) {
unsigned z;
z = (value >> n) | (value << (16 - n));
return (z);
}
unsigned moveleft(unsigned value, int n) {
unsigned z;
z = (value >> (16 - n)) | (value << n);
return (z);
}
第六题:
设计一个函数,使给出一个数的源码能得到该数的补码。
#include
#include
int main() {
unsigned int a;
unsigned int f(unsigned int x);
printf("请输入一个原码:\n");
fflush(stdout);
scanf("%o", &a);
printf("该数的补码为:\n%o\n", f(a));
return 0;
}
unsigned int f(unsigned int x) {
unsigned int y;
y = x & 0100000;
if (y == 0100000) {
y = (~x + 01) | 0100000;
} else {
y = x;
}
return (y);
}
第七题:
(1)定义一个位域,位域列表中有4个变量,
(2)分别给位域中变量赋值,
(3)输出变量的值
#include
#include
int main() {
struct bs
{
unsigned a :1;
unsigned b :3;
unsigned c :4;
unsigned d :5;
} bit;
bit.a = 1;
bit.b = 2;
bit.c = 3;
bit.c = 5;
printf("位域中变量为:\n%d %d %d %d\n", bit.a, bit.b, bit.c, bit.d);
return 0;
}