C语言中的位操作符的应用
来源:互联网 发布:知乎ipad客户端 编辑:程序博客网 时间:2024/05/18 00:56
编写函数:
unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)。
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
unsigned int reverse_bit(unsigned int num) //反转{unsigned int ret = 0;int i = 0;unsigned int y = 0;for (i = 0; i < 32; i++){y = y << 1;//这里要先右移一位,才能保证最高位是num的最低位ret = (num >> i) & 1;y = ret | y;}return y;}int main()//反转一个二进制数{unsigned int num = 0;printf("please enter a num :\n");scanf("%d", &num);printf("%u\n", reverse_bit(num));return 0;}
不使用(a+b)/2这种方式,求两个数的平均值。
int main(){int a = 20;int b = 10;int c = 0;int d = 0;c = a + ((b - a) >> 1);d = (a&b) + ((a^b) >> 1); //慎用!printf("%d\n", c);printf("%d\n", d);return 0;编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)。
int search(int arr[],int len){int key = 0;int i = 0;for (i = 0; i < len; i++){key ^= arr[i];}return key;}/*将数组中的每个数全都取异或运算,最后留下的数就是独数 (注意拓展)(1)a=a^b c^a相当于c^(a^b)(2)自己异或自己两次相当于没有异或,还是自己。*/int main(){int arr[] = { 1, 2, 3, 4, 4, 2, 3, 5, 5 };int len = sizeof(arr) / sizeof(arr[0]);search(arr,len);printf("%d\n", search(arr, len));system("pause");return 0;}有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
void reverse(char *start, char *end){assert(start);assert(end);while (start < end){char temp = *start;*start = *end;*end = temp;start++;end--;}}void reverse_str(char *str, int sz){assert(str != NULL); //检测传入的字符串 char *str1 = str;char *left = str;char *right = str + sz - 1;reverse(left, right); //先将字符串整体反转 while (*str1){left = str1;while ((*str1 != '\0') && (*str1 != ' ')) //找到单词,//此处要加(*str1 != '\0')条件限制,因为找到最后一个单词的时候,*str1永远也不为空格 {str1++;}right = str1 - 1; //此时str1指向单词后方的空格,需要减一方能指向单词的最后一个字母 reverse(left, right); //继整体反转后再次反转单词,能使单词拼写顺序恢复过来 if (*str1 == ' ') //等于空格让指针后移一位否则不能参与下次循环。 {str1++;}}}int main(){char arr[] = "student a am i";int sz = strlen(arr);reverse_str(arr, sz);printf("%s", arr);return 0;}
阅读全文
0 0
- C语言中的位操作符的应用
- C语言位操作的神应用(位操作)
- C 语言中的位操作符
- C语言中的位操作
- C语言中的位操作
- C语言中的位操作
- c语言中的位操作
- C语言之位操作的作用及应用
- C语言位操作符的使用
- C语言位操作符的使用
- C语言的位操作符
- c语言的位操作符
- C语言位操作符的使用
- C语言位操作符的使用
- C语言的位操作
- c语言的位操作
- c语言的位操作
- C语言的位操作
- 机器学习初探
- 白夜追凶 :手 Q 图片的显示和发送逻辑
- 决策树
- 关于服务器的运行寿命 你应该知道这些
- angular.js:14199 Error: [$rootScope:inprog]的成因及解决办法
- C语言中的位操作符的应用
- 将源代码一步打包成deb包的脚本
- 泛型
- 复制数组改良
- 20171027Link
- 欢迎使用CSDN-markdown编辑器
- PL/SQL
- Codeforces 711C 树DP 解题报告
- c的多种用法