一. 问题的引出

今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错。

题目:如下函数,在32bit系统foo(2^31-3)的值是:

Int foo(intx)

{

return x&-x;

}

解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计算30 & -30得出结果。又因为计算机内存中的数据是以二进制的补码形式存在的,所以参与位运算的数都是以补码形式出现。所以需要把30和-30转换为补码之后再进行按位与运算,结果为2。我们还可以用程序看看执行过程中产生的x的值如下:

#include

using namespacestd;int foo(intx){

cout<< "x =" << x <

}voidmain(){int res = 0;

res= foo(2^31-3);

cout<< "res =" << res <

}

二. 字符的优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

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语言等号与符号优先级,【C语言】符号优先级相关推荐

  1. c语言中 ||优先级,C语言运算符号的优先级 A: B: C:|| D:|

    我知道从高到低为:圆括号 单目运算符 算术运算符 关系运算符 逻辑运算C语言运算符优先级顺序如下所示: 自增运算符 ++ 和自减运算符 ,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表 ...

  2. c++运算符优先级_C语言入门教程-(6)运算符

    1.运算符概述 运算符是一种编译器执行特定的数学或逻辑操作的符号.C语言提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 其他运算符 2.算术运算符 算术 ...

  3. c语言等号运算符先计算右边,C语言运算符和表达式.ppt

    <C语言运算符和表达式.ppt>由会员分享,可在线阅读,更多相关<C语言运算符和表达式.ppt(29页珍藏版)>请在人人文库网上搜索. 1.运算符和表达式,夏涛,运算符与表达式 ...

  4. C语言应用笔记(一):运算符优先级和使用问题

    C 语言运算符是说明特定操作的符号,它是构造 C 语言表达式的工具.C 语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理.除了常见的三大类,算术运算符.关系运算符与逻辑 ...

  5. c语言实参形参函数调用指针引用 符号实例,C语言实参、形参、函数调用、指针、引用、符号实例.doc...

    C语言实参.形参.函数调用.指针.引用.符号实例 C语言实参.形参.函数调用.指针.引用.*&符号实例 实现环境:VC6 程序源代码: #include "stdio.h" ...

  6. c语言中的无符号字节,C语言之有符号数和无符号数

    我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时 ...

  7. c语言无符号扩展,C语言无符号和有符号的区别

    C语言定义一个int类型时,默认是有符号数,关键字signed常省略,如: int a; signed int a; signed a; 这三句是一样的定义 定义无符号数时,必须加关键字unsigne ...

  8. matlab第七章符号对象,MATLAB语言:第七章 MATLAB符号计算

    <MATLAB语言:第七章 MATLAB符号计算>由会员分享,可在线阅读,更多相关<MATLAB语言:第七章 MATLAB符号计算(33页珍藏版)>请在人人文库网上搜索. 1. ...

  9. C语言结构标记的作用,C语言基础知识之词法符号

    任何高级语言都有自定义的词法符号和支持的数据类型. 词法符号是语言的基本组成单位,数据类型是数据的基本属性.这里我将先对C语言的C法符号做一个小的总结,既是对我自己C语言的一个系统的整理与提高,也希望 ...

  10. 【最新】国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度、十二等律体系、A4=440.00000Hz)

    [最新]国际绝对音名标准频率及音符长度C语言宏定义(32位无符号整型精度.十二等律体系.A4=440.00000Hz) #ifndef __MUSIC_NOTE_H__ #define __MUSIC ...

最新文章

  1. YOLOv3 训练的各种config文件以及weights文件。
  2. MySQL中更改表操作
  3. 民营企业的ERP之路
  4. 通达oa与mysql集成_安装通达OA后想使用其自带的Mysql数据库的解决方法
  5. 第35届MPD软件工作坊深圳站圆满落幕
  6. 【ES6(2015)】Iterator
  7. js实现删除确认提示框
  8. 亲身试验 pycharm 下载 并 安装 pygame包
  9. 1415-2 计科计高 软件工程博客Github地址汇总-修正版
  10. 智慧医疗解决方案可以大大减少医疗资源浪费!
  11. java 进度条实现原理_java进度条功能的实现原理是什么?实例展示
  12. c语言转换为python语言_C语言程序转换为Python语言
  13. 艾客私域风暴进行时—打造服务型私域,赋能品牌增长新引擎
  14. Python笔记_81_结算页面_订单模型_优惠券
  15. SIGIR2020推荐系统论文解析:Recommendation for New Users and New Items
  16. springboot请求put请求
  17. 计算机应用基础0006 19春在线作业1,川大《计算机应用基础0006》20春在线作业1 -0001...
  18. 菜圈的codewars(一),codewars的注册
  19. Evolutionary Computing: 3. Genetic Algorithm(2)
  20. Just A Triangle

热门文章

  1. 【解决方法】Socket服务端退出之后端口依旧被占用
  2. python itchat文档_python itchat简介
  3. 卡首屏源码,淘口令接口,生成淘口令
  4. http-server 简介
  5. 低版本向日葵本机识别码和验证码提取
  6. linux查看键盘命令,usb键盘鼠标 linux驱动查看及安装
  7. Qt创建Qt Designer自定义控件及使用
  8. Qt Designer怎样加入资源文件
  9. KEIL5下载时提示“keil5 notarget connected”
  10. freeredius3.0 mysql_edius插件下载|Edius9滤镜和转场插件Vitascene+蓝宝石插件GenArts Sapphire3.0.257 官方版_ - 极光下载站...