1楼:匿名用户
*其实是有两种运算的,如果是int a, b; a*b这里*代表乘法,乘法和除法的\的优先级是相同的。
如果:int *c = a; 这里定义了一个整形指针c, 然后 *c/b(这里的*代表取地址的内容),那么*c的优先级就要高于乘法、除法运算。
2楼:gta小鸡
/和*(乘)是同一优先级,计算时从左到右计算,数学中乘号和除号难道不是同一优先级吗
但是*号还有一个作用就是取指针所指地址的值,如*p=a,这个时候*号的优先级要高于/号。
3楼:匿名用户
如果*作为除法运算,那么它们是一个级别,称为算术运算符
如果*作取内容运算,又叫指向运算的时候,这个时候是单目运算符,优先级别比除法/高
4楼:匿名用户
c语言中/、*和%是同一优先级,书中从高到低写意思是在它们之间运算时谁先谁后
5楼:匿名用户
但是书上也在前面标注出来,是同一级别。级别一样高,从左到右,先遇到谁先计算谁
c语言运算符优先级从高到低的顺序依次为?
6楼:同畅碧静晨
一共有十五个优先级:1()
.->2!
~-(负号)
++--
&(取变量地址)*
(type)(强制类型)
sizeof3*
/%4+
-5>>
<<6>>=<<=7==
!=8&9
^10|11
&&12
||13
?:14=+=
-=*=
/=%=
|=^=
&=>>=
<<=15,
就着多吧
结合性:2
1314
是从右至左
其他都是
从左至右
7楼:匿名用户
遵循数**算优先级顺序.
c语言中优先级高先算还是低了先算
8楼:我们必将知道
先算优先级高的,再算优先级低的。
例如:2 + 3 == 5 && 1 + 2 > 5其中运算级从高到低顺序:
+、-== 、 >
&&由于加在左,所以先算加,然后算减,然后判断==,然后判断》,然后算&&
9楼:匿名用户
并不是说优先级高就先算,而是说优先级高的结合性高,而他们的计算顺序还是按设定的从左往右或者从右往左进行计算的。
c语言中的运算符优先级高低是什么意思
10楼:學雅思
运算符用于执行程序**运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。
运算符的优先级是从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。
扩展资料
优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。
请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7。逻辑运算最后结合。
11楼:匿名用户
要了解c语言运算符优先级高低就先从通常数学上运算优先级高低说起。
通常,一个数学算式里如果有加减乘除和括号,我们会先算括号里面的式子,再算括号外面的乘除再然后才是加减。那么这时候我们说括号的优先级比加减乘除的要高,所以我们就先计算括号里的式子。然后是乘除,再然后才是加减。
其中加减乘除就是运算符。所以运算符的高低决定了运算的先后顺序。
同理。c语言中的运算优先级和这一个样,只要你把运算符的优先级记住就可以了。
12楼:匿名用户
比如 1+3*3
因为 *的优先级比+高,所以先运行3*3,在+1。
其实这个不用在意,也不需要背,只要在你需要的运算顺序下加()就行了。
比如 1+(3*3)
13楼:拥抱枯木
就是有不同运算符出现在同一个表达式中,求表达式的值时,优先级高的运算符先结合求值再求优先级低的,比如a+b*c,明显*的优先级比+高,所以先算b*c,得到的值加上a。另外有些符号优先级相同,那就有从左到右结合,和从右到左结合,还需要再详细吗?
14楼:匿名用户
谁的优先级别高 就先执行它 的运算
优先与首先一样吗?
15楼:聂才和
优先与首先在法律文书中意义绝对不一样
优先不代表就是首先,只是比起其他条件更有优势的意思,强调的是比其他选项不仅有名次的优势,而且还有实质的内容优势,可以简单的理解,优先比首先更有选项性
首先只是代表众多选项中的第一项,基本就是起到序号的作用,并不代表最重要的意思;
举个例子就容易懂了
假设某公司招聘保安,有从业经验者优先,这样的招聘广告;某天有诺干名应聘者,可能到的时间不一样,招聘单位,按照他们到的时间填写相关信息,那么第一个可以称为首先;在这么多人中,优先的是做过保安的,那么他将比起其他人就有很明显的优势。
本人解释能力一般,希望能够理解
16楼:匿名用户
优先:放在他人或他事之前。多指在待遇上占先。
如:军人优先
首先:【释义】形容事物的开端,导引事物发展的前沿方向。
1,最先;开头
2,第一。用于列举事项。如:首先,要树立远大而崇高的理想;其次,要制定明确而实际的目标。
c语言中,*、%、/他们的优先级是一样的吗
17楼:缘明思
由于*号有表示指针的一元运算符和表示乘法的二元运算符之分。所以,在表示指针时是高于%和/的
18楼:安定
是* % /这三个吗?若是,他们的优先级是一样的
19楼:匿名用户
是一样的,同一级从左到右。
c语言中 移位 和 按位 和 +-*/ 的优先级是怎么样的
20楼:匿名用户
下面是c语言中所使用的运算符的优先级和结合性:
优先级 运算符 结合性
(最高) () -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
还有指针运算符、sizeof运算符、数组运算符等等
一、赋值运算符
赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。
注意:赋值语句左边的变量在程序的其他地方必须要声明。
得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。常数只能作为右值。
例如:count=5;
total1=total2=0;
第一个赋值语句大家都能理解。
第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。这样它先total2=0;然后total1=total2;那么我们这样行不行呢?
(total1=total2)=0;
这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。
二、算术运算符
在c语言中有两个单目和五个双目运算符。
符号 功能
+ 单目正
- 单目负
* 乘法
/ 除法
% 取模
+ 加法
- 减法
下面是一些赋值语句的例子, 在赋值运算符右侧的表达式中就使用了上面的算术运算符:
area=height*width;
num=num1+num2/num3-num4;
运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。
取模运算符(%)用于计算两个整数相除所得的余数。例如:
a=7%4;
最终a的结果是3,因为7%4的余数是3。
那么有人要问了,我要想求它们的商怎么办呢?
b=7/4;
这样b就是它们的商了,应该是1。
也许有人就不明白了,7/4应该是1.75,怎么会是1呢?这里需要说明的是,当两个整数相除时,所得到的结果仍然是整数,没有小数部分。
要想也得到小数部分,可以这样写7.0/4或者7/4.0,也即把其中一个数变为非整数。
那么怎样由一个实数得到它的整数部分呢?这就需要用强制类型转换了。例如:
a=(int) (7.0/4);
因为7.0/4的值为1.75,如果在前面加上(int)就表示把结果强制转换成整型,这就得到了1。那么思考一下a=(float) (7/4);最终a的结果是多少?
单目减运算符相当于取相反值,若是正值就变为负值,若是负数就变为正值。
单目加运算符没有意义,纯粹是和单目减构成一对用的。
三、逻辑运算符
逻辑运算符是根据表达式的值来返回真值或是假值。其实在c语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。
符号 功能
&& 逻辑与
|| 逻辑或
! 逻辑非
例如:5!3;
0||-2&&5;
!4;当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。逻辑非(!
)运算是把相应的变量数据转换为相应的真/假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。
还有一点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。例如:
a=2,b=1;
a||b-1;
因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。
四、关系运算符
关系运算符是对两个表达式进行比较,返回一个真/假值。
符号 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
这些运算符大家都能明白,主要问题就是等于==和赋值=的区别了。
一些刚开始学习c语言的人总是对这两个运算符弄不明白,经常在一些简单问题上出错,自己检查时还找不出来。看下面的**:
if(amount=123) ……
很多新人都理解为如果amount等于123,就怎么样。其实这行**的意思是先赋值amount=123,然后判断这个表达式是不是真值,因为结果为 123,是真值,那么就做后面的。如果想让当amount等于123才运行时,应该if(amount==123) ……
五、自增自减运算符
这是一类特殊的运算符,自增运算符++和自减运算符--对变量的操作结果是增加1和减少1。例如:
--couter;
couter--;
++amount;
amount++;
看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那么在运算之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加表达式的运算后再运算。这样讲可能不太清楚,看下面的例子:
num1=4;
num2=8;
a=++num1;
b=num2++;
a =++num1;这总的来看是一个赋值,把++num1的值赋给a,因为自增运算符在变量的前面,所以num1先自增加1变为5,然后赋值给a,最终a也为5。b=num2++;这是把num2++的值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2自增加1变为 9。
那么如果出现这样的情况我们怎么处理呢?
c=num1+++num2;
到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定,不同的编译器可能有不同的结果。所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。
六、复合赋值运算符
在赋值运算符当中,还有一类c/c++独有的复合赋值运算符。它们实际上是一种缩写形式,使得对变量的改变更为简洁。
total=total+3;
乍一看这行**,似乎有问题,这是不可能成立的。其实还是老样子,'='是赋值不是等于。它的意思是本身的值加3,然后在赋值给本身。为了简化,上面的**也可以写成:
total+=3;
复合赋值运算符有下列这些:
符号 功能
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 模运算赋值
<<= 左移赋值
>>= 右移赋值
&= 位逻辑与赋值
|= 位逻辑或赋值
^= 位逻辑异或赋值
上面的十个复合赋值运算符中,后面五个我们到以后位运算时再说明。
那么看了上面的复合赋值运算符,有人就会问,到底total=total+3;与total+=3;有没有区别?答案是有的,对于a=a+1,表达式a被计算了两次,对于复合运算符a+=1,表达式a仅计算了一次。一般的来说,这种区别对于程序的运行没有多大影响,但是当表达式作为函数的返回值时,函数就被调用了两次(以后再说明),而且如果使用普通的赋值运算符,也会加大程序的开销,使效率降低。
七、条件运算符
条件运算符(?:)是c语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回两外两个表达式中的一个。
《表达式1>?《表达式2>:《表达式3>
在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
例如:a=(b>0)?b:-b;
当b>0时,a=b;当b不大于0时,a=-b;这就是条件表达式。其实上面的意思就是把b的绝对值赋值给a。
八、逗号运算符
在c语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
假设b=2,c=7,d=5,
a1=(++b,c--,d+3);
a2=++b,c--,d+3;
对于第一行**,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a=8。对于第二行**,那么也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=3。
还有其他的如位逻辑运算符,位移运算符等等,我们等到讲位运算时再说明。
九、优先级和结合性
从上面的逗号运算符那个例子可以看出,这些运算符计算时都有一定的顺序,就好象先要算乘除后算加减一样。优先级和结合性是运算符两个重要的特性,结合性又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算。