C语言运算符和优先级
关于C语言运算符和优先级,经整理众多博客资料汇入自己的实战,如下:
a.算术运算
C语言一共有34种运算符,包括常见的加减乘除运算。
1) 加法:+ 还可以表示正号
2) 减法:- 还可以表示负号
3) 乘法:* 非数学意义上的X
4) 除法:/ 注意1/2的值为0而非0.5
5) 取余(模运算):两个整数相除之后的余数(注意两边都必须是整数,带符号只和左值有关)
注意点:
1) Int a=10.8;//数据精度丢失警告。结果为10——自动类型转换
2) Int a=(int)10.8;//无警告。把10.8强制转换为整型——强制类型转换
3) Double c=10.6+6//结果为16.600000。在计算机中,拿两个数值进行运算,则运算符两边的数值需要类型相同,如果不同则进行自动类型提升。即把6转为6.000000后再参与运算。
4) 参与运算的两个数是什么类型,那么其结果就是什么类型。
int a=10/3结果为3,
double b=10/3结果为3.000000;
double c=10.0/3结果为3.333333。
要求精确值可以进行强制类型转换。
double d=(double)3/2;//把3转换为double类型变为3.000000,之后2进行自动类型提升转变为2.000000参与运算,结果为1.500000。
//也可以写成3/(double)2。区别double e=(double)(3/2)先计算3/2的值为1再对1进行强制类型转换,结果为1.000000。
b.赋值运算
1)简单赋值
Int a=10+5;a=b=10;//从右向左,左边不能为常量
2)复合赋值
a=a+5;=>a+=5;
a=a*5;=>a*=5;
a+=5*6+4;=>a=a+(5*6+4)
提示:预算顺序取决于两点:一是运算符的优先级,二是结合的顺序。
c.自增自减运算
Int a=10;
把a的值加1有四种方法:
1) a=a+1;
2) a+=1;
3) a++;
4) ++a;
简单区分a++和++a。
Int b;
Int a=10;
b=++a; //a==11,b==11;a先把值加1为11,再赋值给b
b=a++; //a==11,b==10;a先把值10复制给b,a自己再加1为11
b=(a++)+(++a); //a1==10,a2==12,b==22
b=(++a)+(a++); //a1==11,a2==11,b==22
注意:int d=10++;//这种写法是错误的,因为对常量进行自加和自减没有任何意义。
d.Sizeof
作用:用来计算变量,常量或者是一种数据类型所占的内存字节数。
基本形式:sizeof(变量名|常量|数据类型),完成之后返回一个值。
1) sizeof 变量|常量
2) sizeof (变量|常量)
3) sizeof (数据类型)
注意:数据类型一定要用括号括起来,不能写成sizeof 数据类型这样的形式。
e.关系运算符
1)条件判断
默认情况下。在程序中写出的每一句正确的代码都会被执行,但很多时候我们需要在某个条件成立的情形下才执行某一段代码,
如登录操作,这种情况可以使用条件语句来完成。
2)真假
在C语言中,条件成立称为“真”,条件不成立称为“假”。
C语言规定,任何数值都有真假性,任何非零值都为真,只有0才为假,无布尔类型。
3)关系比较
关系运算的结果只有两种情况,如果条件成立就为真,值为1,如果条件不成立就为假,值为0。
有6种运算符,分别是:(1)< (2)<= (3) > (4) >= (5)== (6)!=
4)使用注意
a) ==和!=优先级相等,其他四个关系运算符的优先级相等,且前者的优先级低于后者。如2==3>1 应该先计算3>1
b) 关系运算符中,若优先级相同,则“从左往右”结合。如4>3<2,先计算4>3
c) 关系运算符中的优先级小于算术运算符。如3+4>8-2 相当于(3+4)> (8-2)
d) 练习5!=4+2*7>3==10 先计算5!=18>3==10,5!=1==10,1==10,假
f.逻辑运算符
逻辑运算的结果只有两个:真(0)和假(1)
1) 与 && 条件1&&条件2 只有的那个条件1和条件2都成立时,才为真否则为假。
2) 或 || 条件1 ||条件2 当条件1或条件2中有一个成立时就为真,都不成立时为假。
3) 非 ! !条件 取反
注意:逻辑运算符在进行运算时,只要能够确定整体的真假性,后面的条件就不再进行而是直接忽略。
Int a=b=10;
Int c=(a>5)&&(++b>=11);//此时a==10,b==11,c==1
Int c=(a<5)&&(++b>=11);//此时a==10,b==10,c==0
提示:在进行逻辑运算时,如果搞不清楚各个符号的优先级,可以使用()。
g.三目运算符
双目:需要两个值参与运算
单目:1个数值参与运算 如!5
三目:需要3个数值参与
格式:条件?数值1:数值2
先判断?前的条件,若条件成立则返回数值1,若条件不成立则返回条件2。
要求比较a和b的值,把数值大的存入到c中 c=a>b?a:b
比较a,b,c三个数的值,把最大的值存入到d中
Int abmax=(a>b)?a:b;
d=abmax > c ? abmax : c;
十五个优先级:
1) () [] . ->
2) ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof
3) * / %
4) + -
5) >> <<
6) > >= < <=
7) == !=
8) &
9) ^
10) |
11) &&
12) ||
13) ?:
14) = += -= *= /= %= |= ^= &= >>= <<=
15) ,
ps:结合性:2 13 14 是从右至左,其他都是从左至右。
C语言运算符和优先级的更多相关文章
- [转]说说C语言运算符的“优先级”与“结合性”
补充自己的一点理解: 1.关于++i 与 i++的区别. ++i 和 i++如果是单独使用的语句,即二者后面均加上分号,或者其他单独使用的语句,没有任何区别.例如: for(i=0;i<100; ...
- C语言运算符的优先级
熟悉C语言的同学都知道,C语言众多的运算符及繁琐难记的优先级总是搞得我们这些C初学者头大.那么本文就 对C语言中所有的运算符进行汇总,并对其优先级进行一定的介绍. 这里虽然对所有C运算符的优先级进行了 ...
- 说说C语言运算符的“优先级”与“结合性”
论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读.这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时.但从本质上看,仍然是概念理解上的偏差.本文试图通过对三个典型表达式的分析,集 ...
- c语言中 *p++ 和 (*p)++ 有什么区别?以及C语言运算符的优先级。整理。
*p++是指下一个地址. (*p)++是指将*p所指的数据的值加一. C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样:在(*p)+ ...
- [c语言]运算符的优先级与结合性
c语言中运算符的优先级和结合性常常被人混淆一谈,本文目的在于简单谈谈两者的区别.本文举几个简单的例子说明,这些运算符也特别常用. 首先要明白的是:优先级决定表达式中各种不同的运算符起作用的优先次序:而 ...
- C语言运算符的优先级与结合性
结合性:左结合是从左到右依次执行,右结合是从右到左依次执行. 优先级 运算符 名称或作用 运算类型 结合方向 特点 1 () [] -> . 小括号运算符 下标运算符 指向结构成员运算符 结构成 ...
- C语言语法之运算符及优先级
注:该内容整理自以下链接. http://blog.csdn.net/huangblog/article/details/8271791 表:C语言运算符及优先级 优先级 运算符 名称或含义 使用形式 ...
- C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
- C语言的本质(7)——C语言运算符大全
C语言的本质(7)--C语言运算符大全 C语言的结合方向 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左).例如算术运算符的结合性是自左至右,即先左后右.如有表达式 x- ...
随机推荐
- ServletContext读取Web应用中的资源文件
package cn.itcast; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...
- ExtJS笔记 Grids
参考:http://blog.csdn.net/zhangxin09/article/details/6885175 The Grid Panel is one of the centerpieces ...
- cacti监控apache和nginx的配置
一.监控apache1.下载http://forums.cacti.net/about25227.html&highlight=apachestats2.其中的ss_apache_stats. ...
- Hibernate - lazy, fetch, inverse, cascade
Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了"inverse=false"(默认),那么那一 ...
- c# word 转pdf 导出失败,因为此功能尚未安装
savePDF应该是office2007以上的版本才支持的,而且必须是完整版的office. 如果2007提示这个错误,还需要安装一个插件 http://download.microsoft.com/ ...
- Python开发程序:简单主机批量管理工具
题目:简单主机批量管理工具 需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ### 作者介绍: * au ...
- Python开发【第二章】:Python模块和运算符
一.模块初识: Python有大量的模块,从而使得开发Python程序非常简洁.类库有包括三中: Python内部提供的模块 业内开源的模块 程序员自己开发的模块 1.Python内部提供一个 sys ...
- 由SecureCRT引发的思考和学习
由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...
- APP定制开发:APP软件开发的语言和开发环境
APP软件开发是移动互联网开发公司常开发的一种手机应用系统,对于刚刚进入APP软件开发领域的新手来说,选择什么编程语言和需要什么开发环境来开发APP软件是常遇到的问题.下面亿合科技小编来为大家分享下: ...
- iptables rule
和H3C中的acl很像,或者就是一会事,这就是不知道底层的缺陷,形式一变,所有的积累都浮云了 参考准确的说copy from http://www.ibm.com/developerworks/cn/ ...