位操作符
来源:互联网 发布:淘宝客服时间 编辑:程序博客网 时间:2024/06/06 03:05
操作符的种类:
在C语言当中有以下6中位操作符:
<< 左移 >> 右移 & 按位与 | 按位或 ^ 按位异或 ~ 取反
左移:在左移位中,值最左边的几位被丢弃,右边多出来的几个空位则由0补齐。
右移:在右移位中,有两种方案,1、算术移位:左边移入的位由原先该值得符号位决定,符号位为1则移入的位均为1,符号位为0则移入的位均为0。2、逻辑移位:左边移入的位用0填充。两种方案只有当操作数为负数时值才不一样。
与:两个位都为1,结果为1,否则结果为0。
或:两个位都为0,结果为0,否则结果为1。
异或:两个位相同结果为0,两个位不同结果为1。
取反:对参与运算的数的各二进位按位求反。
应用:
1、指定位置1,指定位清0。
Value |=1<<bit_number;/*指定位置1*/
Value &= ~(1<<bit_number);/*指定位清0*/
2、计算参数二进制值中1的个数
int count_bits(unsigned value){int ones;for(ones=0;value!=0;value>>1) if(value&1!=0) ones+=1;return ones;}
3、交换两个变量的值,而不用临时变量
普通方法:
void swap(unsigned char *pa,unsigned char *pb) { unsigned char temp=*pa;//定义临时变量,将pa指向的变量值赋给它 *pa=*pb; *pb=temp; //变量值对调 }异或的方法:
void swap_xor(unsigned char *pa,unsigned char *pb) { *pa=*pa^*pb; *pb=*pa^*pb; *pa=*pa^*pb; //采用异或实现变量对调 }4、二进制逆序
原题是在《C和指针》这本书中的第5章第三题
unsigned int reverse_bits(unsigned int value){unsigned int answer;unsigned int i;answer=0;i=1; for(i=1;i!=0;i<<=1) //将i左移,只要i不等于0就循环下去。 { answer<<=1; //先将答案左移一位为下一个值留出来一个位置 if(value&1) answer|=1; //如果value的最后一位为0,则将answer的最后一位和1相与。 value>>=1; } return answer;}
5、 找出丢失的那个数
一组数当中,总是两个成对出现,但是丢失了一个,请找出丢失的数。
#include<stdio.h> int main() { const int SIZE= 15; int a[SIZE] = {1, 23, 7, 8, 9, 32, 78,1, 23,7, 8, 9, 32, 78,34}; int lost_Num = 0; for (int i = 0; i < SIZE; i++) lost_Num ^= a[i]; printf("丢失的数字为: %d\n", lost_Num); return 0; }
6、如何把一个32位的unsigned int型值,两位两位一组,两头互换,(即第31位和第0位互换,第30位和第1位互换.....)最后返回结果。
unsigned int bit_reverse(unsigned int n) { n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa); n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc); n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0); n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00); n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000); return n; }
0 0
- 位操作符
- java位操作符
- 位运算操作符
- 位操作符介绍
- C#位操作符
- c++(位操作符)
- 简述位操作符
- c++位操作符
- 位操作符
- 位操作符
- 位运算操作符
- 位操作符总结
- 位操作符
- 位操作符
- c#位操作符
- java 位操作符
- 位域操作符
- c++位操作符
- C#操作office组件(excel、word、ppt)报错问题!
- #一周五# (视频) 手掌四轴Estes 4606,树莓派2和WRTNode,WinHEC 2015深圳
- leetcode Remove Duplicates from Sorted Array
- GB18030 - 想说爱你不容易
- 黑马程序员——Object-C基础(一)语言简介
- 位操作符
- Struts2常用标签
- Spring 集合cxf发布webservice
- *jQuery中this与$(this)的区别
- iOS UIPageViewController
- UVA - 690(搜索+剪枝)
- 程序员的编辑器——VIM
- CSDN-MarkDown编辑器使用手册(1)---最简入门
- (尹成)杨辉三角(正三角 倒三角)