-
2021-11-06 17:37:57
一共有15级。除了三类结合性是从右到左(单目运算符、三目运算符、=),大多数的运算符都是从左到右。
优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符。逻辑运算符中逻辑非除外。逗号运算符优先级最低
- []、()、.、->
- -、(类型)、++、–、*、&、!、~、sizeof
- /、*、%
- +、-
- <<、>>
-
、>=、<、<=
- ==、!=
- &
- ^
- |
- &&
- ||
- ?:
- =、/=、*=、%=、+=、-=、<<=、>>=、&=、^=、|=
- ,
更多相关内容 -
【C语言】符号优先级
2021-05-22 06:37:24一. 问题的引出今天看阿里...}解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计...一. 问题的引出
今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错。
题目:如下函数,在32bit系统foo(2^31-3)的值是:
Int foo(int x)
{
return x&-x;
}
解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计算30 & -30得出结果。又因为计算机内存中的数据是以二进制的补码形式存在的,所以参与位运算的数都是以补码形式出现。所以需要把30和-30转换为补码之后再进行按位与运算,结果为2。我们还可以用程序看看执行过程中产生的x的值如下:
#include
using namespace std;
int foo(int x){
cout << "x = " << x << endl;
return x & -x;
}
void main(){
int res = ;
res = foo(^-);
cout << "res = " << res << endl;
}
二. 字符的优先级
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2:表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
说明:同一优先级的运算符,运算次序由结合方向所决定。
三. 优先级口诀
括号成员第一; 括号运算符[]() 成员运算符. ->
全体单目第二; 所有的单目运算符比如++ -- +(正) -(负) 指针运算*&
乘除余三,加减四; 这个"余"是指取余运算即%
移位五,关系六; 移位运算符:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; 即== !=
位与异或和位或; 这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与; 逻辑运算符:|| 和 &&
十二和十一; 注意顺序:优先级(||) 底于 优先级(&&)
条件高于赋值, 三目运算符优先级排到 13 位只比赋值运算符和","高
逗号运算级最低! 逗号运算符优先级最低
参考资料
[1] http://blog.chinaunix.net/uid-23577393-id-2733234.html
[2] http://blog.csdn.net/zhlfox2006/article/details/11854799
[3] http://www.aichengxu.com/article/c%E8%AF%AD%E8%A8%80/31501_11.html
C语言符号优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -& ...
【转】C语言中的符号优先级
转自: http://blog.csdn.net/huangblog/article/details/8271791 虽然在日常使用中,添加括号来明确规定运算符优先级是一种常识,但毕竟学校考试就喜欢考 ...
c语言运算优先级与结合方向的问题
c语言运算的结合方向一直困扰我,不过我终于get到了哈哈 先附上c语言运算优先级和结合方向图片 以上有c语言一共的15个优先级,从上往下递增 c语言的运算符号有很多,当我们打代码或者看代码的时候符号多 ...
一道c语言运算符优先级问题
一道c语言运算符优先级问题 #include using namespace std; int main() { char test[] = {"This ...
C语言操作符优先级
C语言操作符优先级 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...
C++符号优先级
C++符号优先级 优先级 操作符 功能 用法 结合性 1 ()[]->.::++-- Grouping operatorArray accessMember access from a poin ...
C语言运算符优先级总结
一 写在开头1.1 本文内容本文内容为C语言中运算符优先级的总结.转载于:https://blog.csdn.net/huangblog/article/details/8271791,感谢原作者的付 ...
C语言运算符优先级和ASCII表
1. C语言运算符优先级及结合性 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成 ...
C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
(转)C语言运算符优先级 详细列表
C语言运算符优先级 详细列表 文章转自:Slyar Home 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数 ...
随机推荐
何为babel / gulp
Babel主要用来将新版本的javascript(ES6,ES7)编译为ES5,目前它对于新标准的支持程度甚至高于Chrome浏览器.通过引入预设babel-preset-react,babel还能解 ...
hbase-site.xml 配置详解
hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完全正确'的,还要包含文件系统的scheme.例如,要表示hdfs中的'/hbase'目 ...
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.5.Accordion控件
accordion是另一个UI控件,能允许你将一组content加入相互分隔的.能够被浏览者的交互打开或关闭的panels中.因此,它大多数的content在初始化的时候是隐藏的,很像tabs控件.每 ...
Nunit概要
一.NUnit是一个单元测试框架,专门针对于.NET来写的.其实在前面有JUnit(Java),CPPUnit(C++),他们都是xUnit的一员.最初,它是从JUnit而来.现在的版本是2.2.接下 ...
Objective-C基础教程读书笔记(7)
第7章 深入了解Xcode Xcode是一个很好用的工具,有很多强大的功能,不过并不是所有的功能都易于发现.如果你打算长期使用这个强大的工具,就肯定要尽可能多了解它.本章将介绍一些Xcode编辑器的使 ...
jQuery extend函数详解
一 jQuery的扩展方法原型是 $.extend(dest,src1,src2,src3); 含义是将src1,src2,src3合并到dest中,返回值为合并后的dest,该方法合并后,dest的 ...
FileReader读取本地文件
FileReader是一种异步读取文件机制,结合input:file可以很方便的读取本地文件. 一.input:type[file] file类型的input会渲染为一个按钮和一段文字.点击按钮可打开 ...
Day6 Numerical simulation of optical wave propagation之通过随机介质(如大气湍流)的传播(二)
2.蒙特卡洛相位屏 大气折射率变化是一个随机的过程,通过大气的光程长度也同样是随机的.因此,湍流模型仅给出统计平均值,如折射率变量的结构函数和功率谱. 建立大气相位屏的问题就是产生随机过程独立表达式的 ...
学习笔记TF050:TensorFlow源代码解析
TensorFlow目录结构. ACKNOWLEDGMENTS #TensorFlow版本声明 ADOPTERS.md #使用TensorFlow的人员或组织列表 AUTHORS #TensorFlo ...
-
C语言运算符优先级列表(超详细)
2020-09-05 07:47:46本篇文章是对C语言中运算符的优先级进行了详细的分析介绍,需要的朋友参考下 -
C语言符号优先级——(“++”符号的的坑)
2018-06-02 10:40:37最近在做一个读EEPROM中的电压数据,并把数据通过CAN报文发送到上位机的功能。 由于EEPROM读出来的数据是一个字节大小的数据,长度是8位,而电压数据大小是12位,...同时也知道,EEPROM中的数据是按顺序存储的。...最近在做一个读EEPROM中的电压数据,并把数据通过CAN报文发送到上位机的功能。
由于EEPROM读出来的数据是一个字节大小的数据,长度是8位,而电压数据大小是12位,并且,读出来后要把数据再重新整理一下。 一串电池有12个电芯,我需要获得的电压值就是12个值,EEPROM中存储的数据就是12*12/8=18个字节。同时也知道,EEPROM中的数据是按顺序存储的。
在读到18个字节的数据后,于是小弟我就做了以下的操作:
/* 将18个字节的EEPROM数据,转换为12个字节的电压 */
for(i=0,j=0;i<12;i++)
{
if((i%2)==0)
{
voltage_value[i]=(eeprom[j]<<4)+((eeprom[++j]&0xF0)>>4);
}
else
{
voltage_value[i]=((eeprom[j]&0x0F)<<8) + eeprom[++j];
j++;
}}
获取到的电压值完全不是我想要的结果。。。。。。
为了弄清楚咋回事,我给eeprom数组都赋了值,重新输出结果:
/* eeprom数组赋值,voltage_value理论结果都为0xFBD */
for(i=0;i<6;i++)
{
eeprom[i*3]=0xFB;
eeprom[i*3+1]=0xDF;
eeprom[i*3+2]=0xBD;}
/* 将18个字节的EEPROM数据,转换为12个字节的电压 */
for(i=0,j=0;i<12;i++)
{
if((i%2)==0)
{
voltage_value[i]=(eeprom[j]<<4)+((eeprom[++j]&0xF0)>>4);
}
else
{
voltage_value[i]=((eeprom[j]&0x0F)<<8) + eeprom[++j];
j++;
}}
/* 打印结果*/
for(i=0;i<12;i++)
{
printf("%x\t",voltage_value[i]);
}
仔细看打印结果,会发现第一个数据为0xdfd,就已经出了问题。
这一句 voltage_value[i]=(eeprom[j]<<4)+((eeprom[++j]&0xF0)>>4);
运算是先进行了“++j"的操作,因此得出来的结果是voltage_value[0]=(eeprom[1]<<4)+((eeprom[1]&0xF0)>>4);
而不是voltage_value[0]=(eeprom[0]<<4)+((eeprom[1]&0xF0)>>4);
========================华丽丽的分割线=====================================
代码改一下:
for(i=0,j=0;i<12;i++)
{
if((i%2)==0)
{
voltage_value[i]=(eeprom[j]<<4)+((eeprom[1+j]&0xF0)>>4);
j++;
}
else
{
voltage_value[i]=((eeprom[j]&0x0F)<<8) + eeprom[1+j];
j +=2;
}}
打印结果正常了
========================华丽丽的分割线=====================================
或者分开来写:
for(i=0,j=0;i<12;i++)
{
if((i%2)==0)
{
eeprom_value[i]=(eeprom[j]<<4);
eeprom_value[i] +=((eeprom[++j]&0xF0)>>4);
}
else
{
eeprom_value[i]=((eeprom[j]&0x0F)<<8);
eeprom_value[i] += eeprom[++j];
j++;
}}
同样没有问题了:
·
-
C语言运算符优先级
2021-07-04 16:50:061、C语言一共有15个优先级 2、有三种结合方向是从右向左(单目运算符、条件表达式、赋值运算符) 3、同一优先级的运算符,运算次序由结合方向所决定 记忆口诀: 括号成员排第1, 单目运算排第2, 乘除余3、加...Tips:
1、C语言一共有15个优先级
2、有三种结合方向是从右向左(单目运算符、条件表达式、赋值运算符)
3、同一优先级的运算符,运算次序由结合方向所决定
记忆口诀:
括号成员排第1,
单目运算排第2,
乘除余3、加减4,
左移右移排第5,
大于小于6,等于不等于7,
8910:按位与、按位异或、按位或
11和12:逻辑与和逻辑或
13:条件表达式三目运算独一个
各种赋值排14,最后15只剩逗号运算符独一个。
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
从左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
从右到左
单目
运算符++
自增运算符
++变量名/变量名++
--
自减运算符
--变量名/变量名--
*
取值运算符
*指针变量
&
取地址运算符
&变量名
!
逻辑非运算符
!表达式
~
按位取反运算符
~表达式
(类型)
强制类型转换
(数据类型)表达式
sizeof
长度运算符
sizeof(表达式)
3
*
乘
表达式*表达式
从左到右
双目
运算符/
除
表达式/表达式
%
余数(取模)
整型表达式/整型表达式
4
+
加
表达式+表达式
从左到右
双目
运算符-
减
表达式-表达式
5
<<
左移
变量<<表达式
从左到右
双目
运算符>>
右移
变量>>表达式
6
>
大于
表达式>表达式
从左到右
双目
运算符>=
大于等于
表达式>=表达式
<
小于
表达式<表达式
<=
小于等于
表达式<=表达式
7
==
等于
表达式==表达式
从左到右
双目
运算符!=
不等于
表达式!= 表达式
8
&
按位与
表达式&表达式
从左到右
双目
运算符9
^
按位异或
表达式^表达式
从左到右
双目
运算符10
|
按位或
表达式|表达式
从左到右
双目
运算符11
&&
逻辑与
表达式&&表达式
从左到右
双目
运算符12
||
逻辑或
表达式||表达式
从左到右
双目
运算符13
?:
条件运算符
表达式1? 表达式2: 表达式3
从右到左
三目
运算符14
=
赋值运算符
变量=表达式
从右到左
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
从左到右
-
C语言运算符优先级表详解
2021-11-19 11:07:37优先级 -
C语言符号优先级,提供参考
2010-10-25 22:08:56括号成员第一;... //注意顺序:优先级(||) 低于 优先级(&&) 条件高于赋值, //三目运算符优先级排到 13 位只比赋值运算符和","高//需要注意的是赋值运算符很多! 逗号运算级最低! //逗号运算符优先级最低 -
C语言运算符优先级关系表
2021-04-17 13:21:04C语言运算符优先级顺序如下所示: 自增运算符 ++ 和自减运算符 --,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表达式 ++x)时,具有较高的优先级。 +、-、* 和 & 运算符记号不但可以当作一元... -
C语言运算符优先级(超详细)
2019-08-03 11:53:50学习c语言时,经常使用的到运算符的优先级,网上的总结参差不齐,今天找到一个相对比较完整的运算符优先级的总结,现在分享给大家: 原文转载自embed_huang 说明: 同一优先级的运算符,运算次序由结合方向所... -
深入理解c语言运算符优先级
2019-04-07 22:49:33深入了解c语言运算符优先级 引言 很多刚学编程的同学对c语言运算符的优先级往往存在一些困惑,对于一些已经入门了的同学一些不太常用的运算符也较难,比如常见的函数指针: //函数指针 int (*add)(int a , int b); /... -
c语言中运算符有哪几种,优先级顺序是怎样
2021-05-20 10:17:45C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的... -
C语言运算符号优先级顺序.pdf
2012-11-02 11:19:11C语言运算符号优先级顺序.pdf -
C语言运算符优先级口诀
2018-09-25 19:13:29基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先乘除(模),后加减。...C语言常用运算符的优先级口诀是:“单算关逻条赋逗”; 如果加入位运算符,完整口诀是:“单算移关与,异或逻条... -
C语言优先级表格(超全)
2021-12-21 20:30:06C语言优先级表格(超全) -
C语言运算符优先级表
2018-08-23 15:08:53文章作者:姜南(Slyar) ... 单目运算符 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 ... -
c语言运算符优先级.pptx
2020-03-06 06:49:28计算机及程序设计概述运算符与表达式 运算符C语言用于描述对数据进行运算的特殊符号语言具有丰富而繁多的运算符由运算符构成了各种表达式分类语言的运算符按其在表达式中与运算对象的关系单目运算一个运算符连接一个... -
c语言运算符号优先级
2021-05-25 06:30:53/**************************************************************************/01 左结合_()、[]、->、.() 圆括号[] 下标运算符-> 指向结构体成员运算符. 结构体成员运算符/*******************************... -
如何记得住C语言运算优先级
2020-09-07 10:24:44其中提到C语言的45个运算符,按照表中从上到下的顺序优先级依次降低,表中位于同一行的运算符优先级相同。 其实C语言运算运算符可以划分为4类。 第一类是根本不真正运算的运算符,如()、[]、->(取结构体...