C语言的运算符、位操作
2016-07-16 11:10
337 查看
+ - * / (加 减 乘 除)
> >= < <= (大于 大于等于 小于 小于等于)
== != (测试等于 测试不等于)
&& || ! (逻辑与 逻辑或 逻辑非)
>> << (位右移 位左移)
& ! (按位与 按位或)
^ ~ (按位异或 按位取反)
C/C++位操作
[写在前面]
^异或:不同为1,相同为0。可以记为:“异”为不同,不同为1.
signed char 符号位是1时右 移位在左边补1。如:
signed char value=–104;
其二进制表示为10011000。使用下面的操作把它向右移动两位:
value »= 2; //Result 11100110
[传统的C方式位操作]
1、基本操作:
使用一个unsigned int变量来作为位容器。
2、位操作符:
|:按位或操作
如:result = exp1 | exp2;
当exp1和exp2中对应位中有一个为1时,则result中对应位为1,否则为0。
应用特点:与0位“或”相应的位不变,与1位“或”设置相应的位为1。
因此用于:设置某一位为1,而保证其它的位不变。比如:result |= (1<<12)将设置result的第12位为1。
也常用于:给某个位属性值附加上另一个属性值,比如:result |= exp;这里相当于给result附加上exp的属性。
&:按位与操作
如:result = exp1 & exp2;
当exp1和exp2中对应的位都为1时,result中对应的位才为1。
应用特点:与0位“与”相应的位为0,与1位“与”相应的位不变。0与1“与”结果为0,1与1“与”结果为1,所以也就是说bit & 1 = bit,与1进行“与”操作不改变本身。
因此用于:设置某一位为0,而保证其它的位不变。比如:result &= ~(1<<12)将设置result的第12为0。
也常用于:获得某个属性的某一位或某几位。比如:result & 3 将获得result的最低的两位。再比如截取一个32位数字的低8位等等。
也常用于:测试某个属性是否等于或包含特定的值。比如:if(result & exp)…
^:按位异或操作符
如:result = exp16^exp1;
当exp1和exp2中对应位的值不相同时,result对应的位为1。
应用特点:1)0与1“异或”结果位1,1与1“异或”结果位0,也就是说 bit ^ 1 = ~bit,与1“异或”相当于将特定的位取反。
因此用于:将某一特定位取反,而保证其它的位不变。比如:result = (1<<12); 将result的第12位取反。
也常用于:将自己清0,比如:result = reslut;将使result所以位都变成0。
~:反转操作符
将位容器中的所以位都反转,将1变成0,0变成1。
<<:按位左移操作符
如:exp << n;
将容器中的所有位向左移n位,空出的位用0填补。
>>:按位右移操作符
如:exp >> n;
将容器中的所有位向右移n位,空出的位用0填补。
3、C方式位操作总结:
设置特定的位用|;
清除特定的位用&;
取反特定的位用^;
取反所有的位用~;
参考:
http://blog.chinaunix.net/uid-25909722-id-2856108.html
> >= < <= (大于 大于等于 小于 小于等于)
== != (测试等于 测试不等于)
&& || ! (逻辑与 逻辑或 逻辑非)
>> << (位右移 位左移)
& ! (按位与 按位或)
^ ~ (按位异或 按位取反)
C/C++位操作
[写在前面]
^异或:不同为1,相同为0。可以记为:“异”为不同,不同为1.
signed char 符号位是1时右 移位在左边补1。如:
signed char value=–104;
其二进制表示为10011000。使用下面的操作把它向右移动两位:
value »= 2; //Result 11100110
//计算绝对值: int abs(int x) { int y; y = x >> 31; //y一定要是int型,右移结果为0xffffffff或0,若为unsigned 则右移结果为1或0 return (x^y)-y; //or:(x+y)^y }
[传统的C方式位操作]
1、基本操作:
使用一个unsigned int变量来作为位容器。
2、位操作符:
|:按位或操作
如:result = exp1 | exp2;
当exp1和exp2中对应位中有一个为1时,则result中对应位为1,否则为0。
应用特点:与0位“或”相应的位不变,与1位“或”设置相应的位为1。
因此用于:设置某一位为1,而保证其它的位不变。比如:result |= (1<<12)将设置result的第12位为1。
也常用于:给某个位属性值附加上另一个属性值,比如:result |= exp;这里相当于给result附加上exp的属性。
&:按位与操作
如:result = exp1 & exp2;
当exp1和exp2中对应的位都为1时,result中对应的位才为1。
应用特点:与0位“与”相应的位为0,与1位“与”相应的位不变。0与1“与”结果为0,1与1“与”结果为1,所以也就是说bit & 1 = bit,与1进行“与”操作不改变本身。
因此用于:设置某一位为0,而保证其它的位不变。比如:result &= ~(1<<12)将设置result的第12为0。
也常用于:获得某个属性的某一位或某几位。比如:result & 3 将获得result的最低的两位。再比如截取一个32位数字的低8位等等。
也常用于:测试某个属性是否等于或包含特定的值。比如:if(result & exp)…
^:按位异或操作符
如:result = exp16^exp1;
当exp1和exp2中对应位的值不相同时,result对应的位为1。
应用特点:1)0与1“异或”结果位1,1与1“异或”结果位0,也就是说 bit ^ 1 = ~bit,与1“异或”相当于将特定的位取反。
因此用于:将某一特定位取反,而保证其它的位不变。比如:result = (1<<12); 将result的第12位取反。
也常用于:将自己清0,比如:result = reslut;将使result所以位都变成0。
~:反转操作符
将位容器中的所以位都反转,将1变成0,0变成1。
<<:按位左移操作符
如:exp << n;
将容器中的所有位向左移n位,空出的位用0填补。
>>:按位右移操作符
如:exp >> n;
将容器中的所有位向右移n位,空出的位用0填补。
3、C方式位操作总结:
设置特定的位用|;
清除特定的位用&;
取反特定的位用^;
取反所有的位用~;
参考:
http://blog.chinaunix.net/uid-25909722-id-2856108.html
相关文章推荐
- C语言double和float 实例分析
- 初学const总结
- c++遇到问题
- c语言 main函数
- C++ 多继承和虚继承的内存布局
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现
- stl学习(一)优先队列
- C语言转义字符实例详解
- 不用加减乘除做加法 C++
- 【C语言基础】-02字符串和格式化输入/输出
- C#构建GUI界面--C++生成DLL的编程框架
- Add Binary
- C语言 程序 杨辉三角实现
- C++的IO库操作易错
- OpenCV学习C++接口:图像遍历+像素压缩
- c语言中的bool
- C语言中的字符(char)详细讲解
- c语言获取当前工作路径(转)
- C++随机选择的实现 rand函数和rand_r
- 【C++知识点】单例模式的简单实现