Training2:位操作训练
2016-07-16 19:58
483 查看
Training2:位操作训练
1. 题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数。
2.题目:输入一个整数a,再输入两个整数p1、p2(p1 ,p2 < 32),输出该整数的二进制表示方法中从右端开始的p1到p2位。
3.题目:输入一个整数a,再输入两个整数p1、p2(p1,p2 < 32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出。
4.题目:输入一个整数a,再输入两个整数p(p < 32)、v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示。
5.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果。
6.题目:将任意十进制转化为十六进制进行输出。
1. 题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数。
#include <stdio.h> typedef unsigned int uint; uint count1(uint num) { int i; uint count = 0; uint mask = 0x00000001; for(i = 0; i < 31; i++) { if((num >> i) & mask == 1) { count++; } } return count; } int main() { uint num; uint res; printf("input a num\n"); scanf(" %u", &num); res = count1(num); printf("the num of 1 is %d\n", res); return 0; }
2.题目:输入一个整数a,再输入两个整数p1、p2(p1 ,p2 < 32),输出该整数的二进制表示方法中从右端开始的p1到p2位。
#include <stdio.h> typedef unsigned int uint; void output(uint num, uint p1, uint p2) { int i; int tmp; int j = 0; static int arr[32]; uint mask = 0x00000001; for(i = p1 - 1; i < p2; i++) { tmp = (num >> i) & mask; arr[j] = tmp; j++; } for(i = 0; i < j; i++) { printf("%d", arr[i]); } printf("\n"); } int main() { uint num; uint p1; uint p2; char *tab = NULL; printf("input a num\n"); scanf(" %u", &num); printf("input p1 and p2(p1<p2)\n"); scanf(" %u", &p1); scanf(" %u", &p2); output(num,p1,p2); return 0; }
3.题目:输入一个整数a,再输入两个整数p1、p2(p1,p2 < 32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出。
#include <stdio.h> typedef unsigned int uint; void output(uint num, uint p1, uint p2) { int i; int tmp; int j = 0; static int arr[32]; uint mask = 0x00000001; for(i = p1 - 1; i < p2; i++) { tmp = (num >> i) & mask; arr[j] = tmp; j++; } for(i = j - 1; i >= 0; i--) { printf("%d", arr[i]); } printf("\n"); } int main() { uint num; uint p1; uint p2; char *tab = NULL; printf("input a num\n"); scanf(" %u", &num); printf("input p1 and p2(p1<p2)\n"); scanf(" %u", &p1); scanf(" %u", &p2); output(num,p1,p2); return 0; }
4.题目:输入一个整数a,再输入两个整数p(p < 32)、v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示。
#include <stdio.h> typedef unsigned int uint; void ten2two(uint num) { int i; int j = 0; uint arr[32]; uint tmp; uint mask = 0x00000001; for(i = 31; i >= 0; i--) { tmp = (num >> i) & mask; arr[j] = tmp; j++; } for(i = 0; i < j; i++) { printf("%d", arr[i]); } printf("\n"); } uint set_num(uint num, uint p, uint v) { uint mask = 0x00000001; if(v == 1) { mask = mask << (p - 1); num = num | mask; } else { mask = ~(mask << (p - 1)); num = num & mask; } return num; } int main() { uint res; uint num; uint p; uint v; printf("input a num\n"); scanf(" %u", &num); printf("input set location(1~32)\n"); scanf(" %u", &p); printf("input set num(0|1)\n"); scanf(" %u", &v); ten2two(num); res = set_num(num,p,v); ten2two(res); return 0; }
5.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果。
#include <stdio.h> void func(int num) { int i = 0; int sum = 0; int bit = 0; int temp = 0; for(i = 0; i < 32; i++) { if(i > 0 && i < 31) { if((num >> (i - 1) & 1) == (num >> (i + 1) & 1)) { bit = 0; } else { bit = 1; } } temp = i; while(temp) { bit = bit * 2; temp--; } sum = bit + sum; } printf("change:%d\n", sum); } int main() { int num; printf("input a number\n"); scanf(" %d",&num); func(num); return 0; }
6.题目:将任意十进制转化为十六进制进行输出。
#include <stdio.h> char * to16(unsigned int num) { int i; unsigned int tmp; static char str[11]; unsigned int mask = 0x0000000f; str[0] = '0'; str[1] = 'x'; str[10] = '\0'; for(i = 0; i < 8; i++) { tmp = num & mask; if(tmp >= 0 && tmp <= 9) { str[9 - i] = tmp + '0'; } else { str[9 - i] = tmp - 10 + 'a'; } num = num >> 4; } return str; } int main() { unsigned int num; char *str = NULL; printf("input a num\n"); scanf(" %u", &num); str = to16(num); printf("%s\n", str); return 0; }
相关文章推荐
- C/C++位操作实例总结
- C++位操作的常见用法小结
- php进行ip地址掩码运算处理的方法
- C#实现一键换IP、重置DNS、网关及掩码的方法
- 子网掩码精解 工程实践
- 通过一个地址和掩码来确定子网地址
- 解决非法代理服务器
- golang 位操作
- 位操作实现四则运算
- 位操作实现加法
- 用+,-,移位实现除法运算
- ip格式判断、地址段分析、掩码计算工具类
- 【LeetCode】Single Number II
- Win32 SDK函数MessageBox的模拟实现(C语言版)
- 工作记录:php实现对QQ号,手机号,IP地址添加星号作为掩码。
- C# 位操作
- leetcode:Divide Two Integers菜鸟解法
- 联合体+位域,实现位操作,并可以整体读出
- Codility -- PermMissingElem
- [leetcode 190]Reverse Bits