C语言的运算符、位操作
+ - * / (加 减 乘 除)
> >= < <= (大于 大于等于 小于 小于等于)
== != (测试等于 测试不等于)
&& || ! (逻辑与 逻辑或 逻辑非)
>> << (位右移 位左移)
& ! (按位与 按位或)
^ ~ (按位异或 按位取反)
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语言的运算符、位操作的更多相关文章
- 3014C语言_运算符
第四章 运算符 4.1 分类 C语言的运算符范围很广,可分为以下几类: 1.算术运算符:用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(%).自增(++).自减(--)共七种. 2 ...
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C语言预处理运算符
转自C语言预处理运算符 预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号) -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@ ...
- C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...
- go语言的运算符
什么是运算符:运算符用于在程序运行时执行数学或逻辑运算 go语言的运算符如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 一,算数运算符 运算符 描述 实例 + 相加 A ...
- C语言的运算符的优先级与结合性+ASCII表
[0]README 0.1) 内容来源于 C程序设计语言, 旨在整理出C语言的运算符的优先级与结合性, 如下图所示(哥子 记了大半年都没有记住,也是醉了,每次都要去翻): Alert)以下内容转自:h ...
- go语言基本运算符
go语言基本运算符 1.算术运算符 以下假设A=10,B=20: 2.关系运算符 以下假设A=10,B=20: 3.逻辑运算符 以下假设A=true,B=false: 4.位运算符 十进制转二进制: ...
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- 关于C语言中运算符优先级的一次错误
好久没碰编程了,最近有点闲,又拾起来.做了个简单的网络测试程序,测试的时候发现有条语句老是获取不到结果.如下: if(portnumber=atoi(argv[1])>65535) portnu ...
随机推荐
- java中newInstance和new(转)
在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态 ...
- IPV6地址格式分析
IPV6地址格式分析 IPv6的地址长度是128位(bit). 将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开. 例如:2000:0000:0000:0000:00 ...
- thr [树链剖分+dp]
题面 思路 首先,可以有一个$dp$的思路 不难发现本题中,三个点如果互相距离相同,那么一定有一个"中心点"到三个点的距离都相同 那么我们可以把本题转化计算以每个点为根的情况下,从 ...
- [codeforces] 578C Weakness and Poorness || 三分
原题 题目定义了两个变量: poorness表示一个区间内和的绝对值. weakness表示一个所有区间最大的poornesss 题目要求你求一个x使得 a1 − x, a2 − x, ..., an ...
- Gym100286C Clock
不想打题面,题面戳这里. 被这题吓到了,感觉无从下手.最后还是看着题解和别人的代码加以改编最后写出了的.其实理解之后写出了也就是三四十行的样子了. 首先题目有个很重要的条件--转动某个针只会对周期比他 ...
- Codeforces Round #356 (Div. 2) C
C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Extend Html.EditorFor MVC
原文发布时间为:2011-09-07 -- 来源于本人的百度文章 [由搬家工具导入] http://aspadvice.com/blogs/kiran/archive/2009/11/29/Addin ...
- 杭电oj2047-2049、2051-2053、2056、2058
2047 阿牛的EOF牛肉串 #include<stdio.h> int main(){ int n,i; _int64 s[]; while(~scanf("%d" ...
- kali 开启smb
root@kali:~# smbpasswd -a rootNew SMB password:Retype new SMB password:root@kali:~# vi /etc/samba/sm ...
- Altium 原理图出现元件 “Extra Pin…in Normal of part ”警告
原理是因为元器件库中的元器件的所有模式MODE不能和pcb中的引进匹配造成的,那什么又是MODE呢, 看下买的图便很清楚了, MODE可以理解为不同的视图模式吧. 然后赶紧打开原理图库中的有问题的元器 ...