Training2:位操作训练
来源:互联网 发布:乐知英语 编辑:程序博客网 时间:2024/05/16 10:10
题目一:请编写一个c函数,该函数给出一个字节中被置为1的位的个数
#include <stdio.h>
int main()
{
int num, mask;
int count = 0;
int i;
char str[20];
printf("Please input a number:\n");
scanf("%d", &num);
mask = 1 << 7;
for(i = 0; i < 8; i++)
{
if((num & mask ? '1' : '0') == '1')
{
count++;
str[i] = 1;
}
else
{
str[i] = 0;
}
num <<= 1;
}
printf("the number is:");
for(i = 0; i < 8; i++)
{
printf("%d", str[i]);
}
printf("\n");
printf("the number of one is %d.\n", count);
return 0;
}
题目二:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
#include <stdio.h>
int main()
{
int num, mask;
int p1, p2;
int i = 0;
int j;
char str[50];
printf("Please input a number:\n");
scanf("%d", &num);
printf("Please input p1 p2(<32):\n");
scanf("%d %d", &p1, &p2);
mask = 1 << (p2 - 1);
while(p2 >= p1)
{
if((num & mask ? '1' : '0') == '1')
{
str[i++] = '1';
p2--;
num <<= 1;
}
else
{
str[i++] = '0';
p2--;
num <<= 1;
}
}
printf("the binary system is:");
for(j = i-1; j >= 0; j--)
{
printf("%c", str[j]);
}
printf("\n");
return 0;
}
题目三:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include <stdio.h>
int main()
{
int num, mask;
int p1, p2;
int i = 0;
int j;
char str[50];
printf("Please input a number:\n");
scanf("%d", &num);
printf("Please input p1 p2(<32):\n");
scanf("%d %d", &p1, &p2);
mask = 1 << (p2 - 1);
while(p2 >= p1)
{
if((num & mask ? '1' : '0') == '1')
{
str[i++] = '0';
p2--;
num <<= 1;
}
else
{
str[i++] = '1';
p2--;
num <<= 1;
}
}
printf("the binary system is:");
for(j = i-1; j >= 0; j--)
{
printf("%c", str[j]);
}
printf("\n");
}
题目四:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
#include <stdio.h>
int main()
{
int a, p, v, mask;
int i = 0;
char str[50];
printf("Please input a = ");
scanf("%d", &a);
printf("\n");
printf("Please input p(<32) = ");
scanf("%d", &p);
printf("\n");
printf("PLease input v(0/1) = ");
scanf("%d", &v);
printf("\n");
mask = 1 << 31;
for(i = 0; i < 32; i++)
{
if((a & mask ? '1' : '0') == '1')
{
str[i] = '1';
a <<= 1;
}
else
{
str[i] = '0';
a <<= 1;
}
}
if(v == 0)
{
str[31-p] = '0';
}
else
{
str[31-p] = '1';
}
for(i = 0; i < 32; i++)
{
printf("%c", str[i]);
}
printf("\n");
return 0;
}
题目五:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;
#include <stdio.h>
int main()
{
int a, mask;
int i;
int str[50], n_str[50];
printf("Please input a number:");
scanf("%d", &a);
mask = 1 << 31;
for(i = 0; i < 32; i++)
{
if((a & mask ? '1' : '0') == '1')
{
str[i] = 1;
a <<= 1;
}
else
{
str[i] = 0;
a <<= 1;
}
}
for(i = 0; i < 32; i++)
{
if(i == 0)
{
n_str[i] = str[31] ^ str[i+1];
}
else if(i == 31)
{
n_str[i] = str[1] ^ str[i-1];
}
else
{
n_str[i] = str[i-1] ^ str[i+1];
}
}
for(i = 0; i < 32; i++)
{
printf("%d", n_str[i]);
}
printf("\n");
return 0;
}
- Training2:位操作训练
- Training2:位操作训练
- Training2:位操作训练
- Training2:位操作训练
- Training2:位操作训练
- Training2:位操作训练 (以前发的那个有个BUG,没注意,对不起大家了,所以重发)
- 位操作训练
- 位操作训练
- 位操作训练
- 位操作训练
- 位操作训练
- 位操作训练
- 位操作训练
- 积跬步至千里——算法强化训练(4)位操作的几个实例
- zoj 3955 矩阵+ 思维 training2
- 位操作
- 位操作
- 位操作
- Cogs 1345. [ZJOI2013] K大数查询(树套树)
- manjaro系统配置脚本
- ADRCI命令
- RxJava使用小总结:map家族
- (5)AngularJS 1.X 之事件指令
- Training2:位操作训练
- StringParser详解
- (6)AngularJS 1.X 与页面控制相关的指令
- 目前的一点感悟
- 创建和使用Oracle数据库表Integer类型的自增长字段
- 物体检测 real adaboost + 像素区块差
- ionic笔记
- 指针返回 rand()函数的使用例子
- Solr的环境的搭建