您的位置:首页 > 编程语言 > C语言/C++

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

2013-03-25 20:29 573 查看

4.1.1 任务描述

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

#include <stdio.h>

#include <stdlib.h>

int main(void) {

//定义变量

int num, 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");

return EXIT_SUCCESS;

}

5.1.1 作业任务

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

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

#include <stdio.h>

#include <stdlib.h>

int main(){

int x=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);

return EXIT_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>

int main(){

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);

return EXIT_SUCCESS;

}

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

5.3.1作业任务

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

#include <stdio.h>

#include <stdlib.h>

void fun(int *a, int *b) {

//按位异或运算符

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

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

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

}

int main() {

//定义变量

int a, 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);

return EXIT_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>

int main() {

unsigned moveright(unsigned, int);

unsigned moveleft(unsigned, int);

unsigned a;

int n;

printf("\n input an octal number:");

fflush(stdout);

scanf("%o", &a);

printf("input n:");

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));

}

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);

}

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

5.5.1作业任务

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

#include <stdio.h>

#include <stdlib.h>

int main() {

unsigned int a; //定义整型a

Unsigned int getbits(unsigned); //加载方法签名

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

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

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

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

return EXIT_SUCCESS;

}

unsigned int getbits(unsigned value)

{

unsigned int z; //定义无符号整型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>

struct location {

//定义无符号整形变量

unsigned int a :1;

unsigned int b :2;

unsigned int c :2;

unsigned int d :3;

} lo;

int main() {

//给变量赋值

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);

return EXIT_SUCCESS;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐