C运算符的优先级

  • C语言有大量的运算符。表B.2.1按优先级从高至低的顺序列出了C运算符,并给出了其结合性。除非特别指明,否则所有运算符都是二元运算符(需要两个运算对象)。注意,一些二元运算符和一元运算符的表示符号相同,但是其优先级不同。例如,*(乘法运算符)和*(间接运算符)。表后面总结了每个运算符的用法。

/**********************算术运算符*******************/+ 把右边的值加到左边的值上。
+ 作为一元运算符,生成一个大小和符号都与右边值相同的值。
- 从左边的值中减去右边的值
- 作为一元运算符,生成一个与右边值大小相等符号相反的值。
* 把左边的值乘以右边的值。
/ 把左边的值除以右边的值;如果两个运算对象都是整数,其结果要被截断。
% 得左边值除以右边值时的余数
++ 把右边变量的值加1(前缀模式),或把左边变量的值加1(后缀模式)。
--  把右边变量的值减1(前缀模式),或把左边变量的值减1(后缀模式)。/**********************关系运算符*******************/<  小于
<=  小于或等于
==  等于
>=  大于或等于
>  大于
!=  不等于/**********************赋值运算符*******************/C语言有一个基本赋值运算符和多个复合赋值运算符。=运算符是基本的形式:= 把它右边的值赋给其左边的左值。
下面的每个赋值运算符都根据它右边的值更新其左边的左值。我们使用
R-H表示右边,L-R表示左边。
+= 把左边的变量加上右边的量,并把结果储存在左边的变量中。
-= 从左边的变量中减去右边的量,并把结果储存在左边的变量中。
*= 把左边的变量乘以右边的量,并把结果储存在左边的变量中。
/= 把左边的变量除以右边的量,并把结果储存在左边的变量中。
%= 得到左边量除以右边量的余数,并把结果储存在左边的变量中。
&= 把L-H & R-H的值赋给左边的量,并把结果储存在左边的变量中。
|= 把L-H | R-H的值赋给左边的量,并把结果储存在左边的变量中。
^= 把L-H ^ R-H的值赋给左边的量,并把结果储存在左边的变量中。
>>= 把L-H >> R-H的值赋给左边的量,并把结果储存在左边的变量中。
<<= 把L-H << R-H的值赋给左边的量,并把结果储存在左边的变量中。示例
rabbits *= 1.6;与rabbits = rabbits * 1.6效果相同。/**********************逻辑运算符*******************/逻辑运算符通常以关系表达式作为运算对象。!运算符只需要一个运算对象,其他运算符需要两个运算对象,运算符左边一个,右边一个。&& 逻辑与
|| 逻辑或
! 逻辑非1.逻辑表达式
当且仅当两个表达式都为真时,expresson1 && expresson 2的值才为真。
两个表达式中至少有一个为真时,expresson 1 && expresson 2的值就为真。
如果expresson的值为假,则!expresson为真,反之亦然。2.逻辑表达式的求值顺序
逻辑表达式的求值顺序是从左往右。当发现可以使整个表达式为假的条件时立即停止求值。3.示例
6 > 2 && 3 == 3 为真。
!(6 > 2 && 3 == 3) 为假。
x != 0 && 20/x < 5 只有在x是非零时才会对第2个表达式求值。/**********************条件运算符*******************/?:有3个运算对象,每个运算对象都是一个表达式:expression1  ?expression2 : expression3
如果expression1为真,则整个表达式的值等于expression2的值;否则,等于expression3的值。示例
(5 > 3) ? 1 : 2的值为1。
(3 > 5) ? 1 : 2的值为2。
(a > b) ? a : b的值是a和b中较大者/**********************与指针有关运算符*******************/&是地址运算符。当它后面是一个变量名时,&给出该变量的地址。
*是间接或解引用运算符。当它后面是一个指针时,*给出储存在指针指向地址中的值。示例
&nurse是变量nurse的地址:
nurse = 22;
ptr = &nurse; /* 指向nurse的指针 */
val = *ptr;
以上代码的效果是把22赋给val。/**********************符号运算符*******************/-是负号,反转运算对象的符号
+ 是正号,不改变运算对象的符号/**********************结构和联合运算符*******************/结构和联合使用一些运算符标识成员。成员运算符与结构和联合一起使用,间接成员运算符与指向结构或联合的指针一起使用。1.成员运算符
成员运算符(.)与结构名或联合名一起使用,指定结构或联合中的一个成员。如果name是一个结构名,member是该结构模板指定的成员名,那么name.member标识该结构中的这个成员。name.member的类型就是被指定member的类型。在联合中也可以用相同的方式使用成员运算符。示例
struct {int code;float cost;
} item;
item.code = 1265;
上面这条语句把1265赋给结构变量item的成员code。
2.间接成员运算符(或结构指针运算符)
间接成员运算符(->)与一个指向结构或联合的指针一起使用,标识该结构或联合的一个成员。假设ptrstr是一个指向结构的指针,member是该结构模板指定的成员,那么ptrstr->member标识了指针所指向结构的这个成员。在联合中也可以用相同的方式使用间接成员运算符。示例
struct {int code;float cost;
} item, * ptrst;
ptrst = &item;
ptrst->code = 3451;以上程序段把3451赋给结构item的成员code。下面3种写法是等效的:
ptrst->code item.code  (*ptrst).code/**********************按位运算符*******************/下面所列除了~,都是按位运算符。
~ 是一元运算符,它通过翻转运算对象的每一位得到一个值。
& 是逻辑与运算符,只有当两个运算对象中对应的位都为1时,它生成的值中对应的位才为1。
| 是逻辑或运算符,只要两个运算对象中对应的位有一位为1,它生成的值中对应的位就为1。
^  是按位异或运算符,只有两个运算对象中对应的位中只有一位为1(不能全为1),它生成的值中对应的位才为1。
<< 是左移运算符,把左边运算对象中的位向左移动得到一个值。移动的位数由该运算符右边的运算对象确定,空出的位用0填充。
>> 是右移运算符,把左边运算对象中的位向右移动得到一个值。移动的位数由该运算符右边的运算对象确定,空出的位用0填充。示例
假设有下面的代码:
int x = 2;
int y = 3;
x & y的值为2,因为x和y的位组合中,只有第1位均为1。而y << x的值为12,因为在y的位组合中,3的位组合向左移动两位,得到12。/**********************混合运算符*******************/sizeof给出它右边运算对象的大小,单位是char的大小。通常,char类型的大小是1字节。运算对象可以圆括号中的类型说明符,如sizeof(float),也可以是特定的变量名、数组名等,如sizeof  foo。sizeof表达式的类型是size_t。
_Alignof(C11)给出它的运算对象指定类型的对齐要求。一些系统要求以特定值的倍数在地址上储存特定类型,如4的倍数。这个整数就是对齐要求。
(类型名)是强制类型转换运算符,它把后面的值转换成圆括号中关键字指定的类型。例如,(float)9把整数9转换成浮点数9.0。,是逗号运算符,它把两个表达式链接成一个表达式,并保证先对最左端的表达式求值。整个表达式的值是最右边表达式的值。该运算符通常在for循环头中用于包含更多的信息。示例
for (step = 2, fargo = 0; fargo < 1000; step *= 2)
fargo += step;

C运算符解析及优先级相关推荐

  1. c++语言运算符的优先次序,C++中的运算符和运算符优先级总结

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本文将逐一介绍算术运 ...

  2. C++中的运算符和运算符优先级总结

    原文链接:http://www.jb51.net/article/83857.htm 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术 ...

  3. Java位运算符以及运算优先级

    1. Java中的位运算符 (1) 与&: 对运算符两侧以二进制表达的操作符按位分别进行'与'运算. 操作的规则是:仅当两个操作数都为1时.输出结果才为1.否则为0 例:12 & 5 ...

  4. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系

    CLR要求对象必须使用new运算符创建,在使用new运算符创建一个对象时具体都做了些什么呢? 1.计算所有定义的实例字段,所有的基类型包括System.Object需要分配的字节数. 每一个堆上的对象 ...

  5. python位运算符_NumPy按位运算符解析和实例详解

    本文概述 Numpy提供以下按位运算符. SN Operator Description 1 bitwise_and 它用于计算相应数组元素之间的按位运算. 2 bitwise_or 它用于计算相应数 ...

  6. 深入浅出解析CSS优先级规则

    最近,小莫公司的java同事老是过来问他们写了的样式为什么不生效,秉承着同事之间互相帮助的原则不厌其烦地一遍一遍的解释.最后还是觉得还是应该把自己对于css优先级的经验整理出来,供大家学习交流. 概念 ...

  7. 浏览器解析编码优先级

  8. Mybatis中运算符解析

  9. 根据运算符优先级解析SQL规则表达式

    1.需求 测试数据库使用Greenplum,生产库使用GBase 普通表:存储客户数据,千万级别,结构如下 stat_date代表日期:user_id代表用户id:serial_number代表手机号 ...

最新文章

  1. 如何让PictureBox背景色透明
  2. datagrid中使用dropdownlist编辑模版时遇到问题
  3. 【转】用BibTeX 写 Reference
  4. C# string转double,double转string
  5. sublime运行python_sublime交互执行python文件方法
  6. stm32 LCD1602显示
  7. SU插件情报局 | SUBD(细分曲面)详细中文介绍
  8. E680手机上能用的 MPlayer
  9. 新冠病毒对计算机的影响,人工智能给新冠病毒分类
  10. ADO的七个对象详情解读
  11. 那位仁兄或者仁姐能给小弟一个菊花论坛的邀请码
  12. pip 命令报错 Fatal error in launcher: Unable to create process using ... ???? ???????
  13. 抖音自媒体账号被限流?这3种方法教你如何鉴别
  14. uboot-链接脚本(u-boot.lds)
  15. 用html写显示一首古诗,怎么用html/css写一首古诗
  16. group by的用法
  17. 集成开发环境PL/SQL Developer v13.0新功能(二)——PL / SQL美化功能增强
  18. HDMI EDID格式详细解析
  19. Android QQ空间浏览图片动画特效的实现(※)
  20. 名片管理程序Python

热门文章

  1. ZStack获1亿元B轮融资,深创投领投、阿里云继续跟投
  2. sql server 2008 学习笔记
  3. Mac下Virtual Box Host-Only网络配置
  4. mac iTunes启动失败,声称iTunes文件夹被锁定
  5. 互联网话题: 陈冠希, 张柏芝, 台湾, ASP与雪灾
  6. Windows下 Apache+PHP5+MYSQL5+phpmyadmin 规范安装
  7. 在 MFC SDI 程序中实现多语言程序界面
  8. freemarker 概述
  9. 微服务技术方案:Spring Cloud 从入门到实战
  10. redis分布式缓存(二)