c语言运算符号详细说明

C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符。其它都是左结合性。

判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺序计算,或从右至左顺序计算。

C语言中的符号

运算符的种类

语言的运算符可分为以下几类:

1 算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。

2.关系运算符

用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)

、小于等于(<=)和不等于(!=)六种。

3.逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4.位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。

5.赋值运算符

用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

6.条件运算符

这是一个三目运算符,用于条件求值(?:)。

7.逗号运算符

用于把若干表达式组合成一个表达式(,)。

8.指针运算符

用于取内容(*)和取地址(&)二种运算。

9.求字节数运算符

用于计算数据类型所占的字节数(sizeof)。

10.特殊运算符

有括号(),下标[],成员(→,.)等几种。

优先级排序:

优先级1级 结合方向 左结合(自左至右)编辑
( ) 圆括号
[ ] [1]  下标运算符
-> 指向结构体成员运算符
. 结构体成员运算符[1]  (请注意它是一个实心圆点)

优先级2级 结合方向 右结合(自右至左)单目运算符编辑
! 逻辑非运算符
~ 按位取反运算符
++ 自增运算符
-- 自减运算符
- 负号运算符
(类型) 类型转换运算符
* 指针运算符
& 地址与运算符
sizeof 长度运算符

优先级3级 结合方向 左结合 双目运算符编辑
* 乘法运算符
/ 除法运算符
% 取余运算符

优先级4级 结合方向 左结合 双目运算符编辑
+ 加法运算符
- 减法运算符

优先级5级 结合方向 左结合 双目运算符编辑
<< 左移运算符
>> 右移运算符

优先级6级 结合方向 左结合 双目运算符编辑
<、<=、>、>= 关系运算符

优先级7级 结合方向 左结合 双目运算符编辑
== 等于运算符 (判断)
!= 不等于运算符(判断)

优先级8级 结合方向 左结合 双目运算符编辑
& 按位与运算符

优先级9级 结合方向 左结合 双目运算符编辑
^ 按位异或运算符

优先级10级 结合方向 左结合 双目运算符编辑
| 按位或运算符 举例:0xfe|0xef 即为1111 1110 与1110 1111按位或运算则答案为:1111 1111 即0xff。

优先级11级 结合方向 左结合 双目运算符编辑
&& 逻辑与运算符

优先级12级 结合方向 左结合 双目运算符编辑
|| 逻辑或运算符

优先级13级 结合方向 右结合 三目运算符编辑
? : 条件运算符

优先级14级 结合方向 右结合 双目运算符编辑
= 赋值运算符
+ = 加后赋值运算符 如s+=1表示s=s+1
- = 减后赋值运算符 如s-=1表示s=s-1
* = 乘后赋值运算符
/ = 除后赋值运算符
% = 取模后赋值运算符
< <= 左移后赋值运算符
>>=右移后赋值运算符
&= 按位与后赋值运算符
^=按位异或后赋值运算符
|= 按位或后赋值运算符

优先级15级 结合方向 左结合编辑
, 逗号运算符

说明:

同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

版权声明:本文为博主原创文章,转载请附上原文链接,谢谢。

时间: 2024-10-13 07:21:45

c语言运算符号详细说明的相关文章

【C语言】符号优先级

一. 问题的引出 今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错. 题目:如下函数,在32bit系统foo(2^31-3)的值是: Int foo(int x) { return x&-x; } 解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计算30 & -30得出结果.又因为计算机内存中的数据是以二进制的补码形式存在的,所以参与

C语言scanf函数详细解释(转)

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

输出运算符号时的不同

当定义 时 char i = '+';  System.out.println(i);  System.out.println(1+i+1);  System.out.println(1+""+i+""+1); System.out.println(1+b+1); 输出为 +451+1 1+1 在第二个中,i被当做“45”直接与前后的1相加. 但在一,三中,i被当做“+”符号,直接打印出来 就是说如果“+”两边有int型数据,就会被当做运算符号使用, 字符串类型的就

C语言有符号加减溢出

sizeof(short int ) = 2; 测试用例 #include <stdio.h> int main() { short int a = -32768; short int b = 0x8000; short int c = 0xffff; short int d = 0x8001; printf("%d, %d, %d, %d\n", a, b, c, d); a -= 1; b -= 1; c -= 1; d -= 1; printf("%d, %

php基础_字符函数or运算符号

1.PHP字符串函数 1.strlen()函数 返回字符串长度,以字符计数 举个栗子: <?php echo strpos("Hello World!"); ?> links 192.168.3.181 我的第一张 PHP 页面 12 2.strpos()函数 strpos()函数用于检索字符串内制定字符或文本,如果找到匹配.则会返回首个匹配的字符位置,如果未找到匹配,则会返回FALSE. 举个栗子: <?php echo strpos("Hello Wor

Linux中设置vim自动在运算符号两边加上空格

vim中设置自动在=+-之类的运算符号左右两边加上空格.原版的vim不带这个功能,写出的代码例如z=x+y,不美观,很多编译器(如VS)能够自动在符号两边加上空格,如z = x + y,看起来比较美观. 只要在.vimrc里面加入如下代码: "设置= + - * 前后自动空格 "设置,后面自动添加空格 if exists("g:equ") :inoremap = <c-r>=EqualSign('=')<CR> :inoremap + <

关于函数运算符号重载函数

class A{public:    typedef int (*func)(int);    operator func();};int ff(int a){    return a;} A::operator func(){    return ff;} int main () {    cout<< A::func(9)<<endl;//运算符号 func() 这个func是typedef类型的. 调用的时候指定作用域} //运算符重载:成员函数方式 #include <

如何用MathType编辑集合运算符号

在涉及到集合的运算中,有交并且几种常见的运算,这在数学问题中也是很常见的公式.在用MathType编辑这些符号时,该怎么编辑呢?下面就介绍MathType集合运算符号的编辑方法. 具体操作过程如下: 1.打开MathType公式编辑器,进入到编辑模式后,编辑集合公式.  在MathType编辑窗口编辑集合符号 2.在“设置理论符号”模板中选择相应的符号点击输入即可.属于.不属于.包含.不包含.交集.并集等常见的集合运算符号都可以进行使用.  在“设置理论符号”模板中选择相应的符号 以上内容向大家

认识变量,赋值运算符号

什么是变量呢? 如果想知道什么是变量还需要知道什么是内存,内存就是计算机临时存储的记忆 相当于人类的大脑 但是 是临时记忆 为什么说他是临时记忆呢 因为你的电脑关闭或者断电 记忆就会消失,这就是内存 既然我们知道了什么是内存那么下面我们来看一个例子 试想一下我们去宾馆开房的过程 首先是和前台说我们需要什么类型的房间 比如 单人间 双人间 等等 然后我们根据自己的需求选择合适的房间类型进行入住,如果宾馆的前台或者是宾馆服务人员需要找到具体的每位客人的话就会根据房间编号进行查找 什么是房间编号?比如