`
v5browser
  • 浏览: 1136751 次
社区版块
存档分类
最新评论

C语言位段操作,写一个程序,从键盘上接收一个整数,用二进制形式输出这个整数

 
阅读更多

4.1.1任务描述

写一个程序,从键盘上接收一个整数,用二进制形式输出这个整数。

#include<stdio.h>

#include<stdlib.h>

intmain(void){

//定义变量

intnum,a[32],i=0;

//提示用户输入内容

printf("请输入一个十进制整数:\n");

//强制刷新

fflush(stdout);

//接收从键盘上输入的内容

scanf("%d",&num);

while(num!=0){

a[i++]=num%2;

num=num/2;

}

for(i--;i>=0;i--){

printf("%d",a[i]);

}

printf("\n");

returnEXIT_SUCCESS;

}

5.1.1作业任务

已知intx=5,y=3求解下列表达式的值

!x,~x,x&y,x&&y,x|y,x||y,x^y

#include<stdio.h>

#include<stdlib.h>

intmain(){

intx=5,y=3;

printf("%d\n",!x);

printf("%d\n",x);

printf("%d\n",~x);

printf("%d\n",x&y);

printf("%d\n",x&&y);

printf("%d\n",x|y);

printf("%d\n",x||y);

printf("%d\n",x^y);

returnEXIT_SUCCESS;

}

======================================================================

5.1.1作业任务

完成下列任务(手写需要步骤)

(1)把十进制数278转换成二进制、八进制、十六进制。

(2)把二进制数100100101转换成八进制、十六进制、十进制。

(3)把八进制706转换成十进制、十六进制、二进制。

(4)把十六进制FA01转换为二进制、八进制、十进制。

(1)278换成二进制为:100010110

八进制为:426

十六进制:116

(2)100100101转换八进制:445

十六进制:125

十进制为:293

(3)706转换成十进制:454

十六进制:1C6

二进制为:111000110

(4)FA01转换二进制:1111101000000001

八进制为:175001

十进制为:64001

======================================================================

5.2.1作业任务

完成下列任务(手写需要步骤)

(1)求27&5

(2)求17|12

(3)求27&5

(4)求27^5

(5)求27<<5

(6)求27>>5

#include<stdio.h>

#include<stdlib.h>

intmain(){

printf("%d\n",27&5);

printf("%d\n",17|12);

printf("%d\n",27&&5);

printf("%d\n",27^5);

printf("%d\n",27<<5);

printf("%d\n",27>>5);

returnEXIT_SUCCESS;

}

======================================================================

5.3.1作业任务

写一函数实现两个数的交换,交换变量利用位运算实现。

#include<stdio.h>

#include<stdlib.h>

voidfun(int*a,int*b){

//按位异或运算符

*a=(*a)^(*b);

*b=(*b)^(*a);

*a=(*a)^(*b);

}

intmain(){

//定义变量

inta,b;

printf("请输入两个整数:\n");

fflush(stdout);

scanf("%d,%d",&a,&b);

printf("转换前的顺序:a=%d,b=%d\n",a,b);

fun(&a,&b);

printf("输出转换顺序后的数字:a=%d,b=%d\n",a,b);

returnEXIT_SUCCESS;

}

======================================================================

5.4.1作业任务

编写一个函数用来实现左右循环移位,函数名为move,调用方法为move(value,n)其中value为要循环位移的数,n为位移的位数。例如你n<0表示为左移;n>0为右移,n=4表示要右移4位,n=-3表示左移3位。

#include<stdio.h>

#include<stdlib.h>

intmain(){

unsignedmoveright(unsigned,int);

unsignedmoveleft(unsigned,int);

unsigneda;

intn;

printf("\ninputanoctalnumber:");

fflush(stdout);

scanf("%o",&a);

printf("inputn:");

scanf("%d",&n);

if(n>0){

moveright(a,n);

printf("result:%o\n",moveright(a,n));

}else{

n=-n;

moveleft(a,n);

printf("result:%o\n",moveleft(a,n));

}

returnEXIT_SUCCESS;

}

unsignedmoveright(unsignedvalue,intn){

unsignedz;

z=(value>>n)|(value<<(16-n));

return(z);

}

unsignedmoveleft(unsignedvalue,intn){

unsignedz;

z=(value>>(16-n))|(value<<n);

return(z);

}

======================================================================

5.5.1作业任务

设计一个函数,使给出一个数的源码能得到该数的补码。

#include<stdio.h>

#include<stdlib.h>

intmain(){

unsignedinta;//定义整型a

Unsignedintgetbits(unsigned);//加载方法签名

printf("请输入八进制数:\n");

fflush(stdout);//换行之后打印字符串

scanf("%o",&a);//输入需要转换的数字a

printf("结果为:%o\n",getbits(a));//将输入的a传入到方法getbits中计算结果并打印出来

returnEXIT_SUCCESS;

}

unsignedintgetbits(unsignedvalue)

{

unsignedintz;//定义无符号整型z

z=value&0100000;//将传入的参数value和0100000进行与操作之后的结果赋值给z

if(z==0100000)//判断z是否等于0100000,等于执行下面操作

z=~value+1;//传入的参数value取反加一赋值给z

else

z=value;//否则将value本身赋值给z

return(z);//返回结果z

}

======================================================================

5.6.1作业任务

(1)定义一个位域,位域列表中有4个变量,

(2)分别给位域中变量赋值,

(3)输出变量的值

#include<stdio.h>

#include<stdlib.h>

structlocation{

//定义无符号整形变量

unsignedinta:1;

unsignedintb:2;

unsignedintc:2;

unsignedintd:3;

}lo;

intmain(){

//给变量赋值

lo.a=1;

lo.b=3;

lo.c=2;

lo.d=7;

printf("%d,%d,%d\n",lo.a,lo.b,lo.c,lo.d);

returnEXIT_SUCCESS;

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics