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;
}
相关文章推荐
- 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, 然后打印出这个十进制整数对应的二进制形式。
- C语言整数十进制按照二进制形式输出程序
- C语言编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
- 写一个程序,从键盘上接收两个整数,输出这两个整数中值大的一个。
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- 用移位运算实现一个整数二进制形式的输出--简短程序分析
- 要求接收一个数字,程序会将这个数字以二进制方式打印
- 第十三周-输入一个整数,要求输出对应的二进制形式。
- 华为机试——通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
- 【c语言】从键盘输入一个小于1000的正数,输出它的平方根(若平方根不是整数,则输出它的整数部分)
- 2013-03-07:编写一个JAVA程序,用户用键盘只能输入整数,程序输出这些整数的乘积
- 用java写一个用户只能从键盘输入整数,程序输出这些整数的乘积
- 输入一个整数,将这个整数以字符串的形式逆序输出
- 编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果是大写字符,就输出对应的小写字符,如果是数字不输出
- 程序运行时提示输入一个整数并利用Scanner类接收数据,输出该数值是几位数。(要求:利用String 类中的方法)
- c语言:编写一个程序,可以直接接收键盘字符
- C语言求一个整数的二进制形式表示中1的个数,用函数实现
- 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。