c语言位操作例题

第一题:
写一个程序,从键盘上接收一个整数,用二进制形式输出这个整数。
#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;
}

 

 

你可能感兴趣的:(c语言)