【20180625】【C/C++基础知识】C语言基本运算:算术运算、赋值运算、关系运算符、逻辑运算、位运算、运算的优先级和结合性、其他运算(三目运算符、长度运算、逗号运算符) |
您所在的位置:网站首页 › 什么是单目运算符、双目运算符和三目运算符 › 【20180625】【C/C++基础知识】C语言基本运算:算术运算、赋值运算、关系运算符、逻辑运算、位运算、运算的优先级和结合性、其他运算(三目运算符、长度运算、逗号运算符) |
1. 算术运算: 双目运算:(参与运算的有两个)加减乘除取余,除法运算要注意,如果参与运算的都为整数,那么结果也为整数,若参与运算的有实数,那么结果为实数!如:34/4=8。而取余运算要注意,参与运算必须为整数!如:14%3=2。单目运算:(参与运算的只有一个)自增自减取负,a++或++a等效于a=a+1;a--或—a等效于a=a-1,前置(先操作在取变量值) ++在前 和后置(先取变量值在做操作)++在后 ;-a单目运算的“前置”和“后置”的区别:“前置”:变量先增值(或先减值),后被引用; “后置”:变量先被引用,后再增值(或后减值)
2. 赋值运算: = 赋值表达式可以嵌套使用,例如:x=(y=(z=100)),相当于x=100,y=100,z=100。赋值运算会把右边表达式的数据类型转换成左边变量的类型。复合运算符=双目+单目,例如加赋值a+=b等效于a=a+b;减赋值a-=b等效于a=a-b;乘赋值a*=b等效于a=a*b;除赋值a/=b等效于a=a/b;取余赋值a%=b等效于a=a%b。算术运算符优先级高于算术赋值运算符,例如x*=10+2等价于x=x*(10+2)。3. 关系运算符:真(非零),假(为0)
4. 逻辑运算(三种):逻辑与a&&b,逻辑或(a||b),逻辑非(!a)逻辑真为非零,逻辑假为零。
5. 位运算:位逻辑运算、移位运算。 变量本身的值不变,左移一位会实现快速乘2,右移一位会实现快速除以2。左移:高位移出,低位补0;右移:低位移出,高位补0;变量名>>右移位数,每右移n位相当于除以2的n次幂;变量名三目运算符;算术运算符>关系运算符>逻辑运算符; 移位运算符>关系运算符>位逻辑运算符; 括号最高,逗号最低,赋值和复合赋值仅高于逗号运算符。 右结合性:先计算右边再计算左边:三目和赋值运算符左结合性:先计算左边再计算右边:其余运算符。程序1:输入一个正整数,判断它是否是闰年。 思路:闰年的判断条件:能被400整除,或能被4整除但不能被100整除。 思路:清零:和0相与;置一:和1相或;取反:和本身异或。 注意: 取反:和本身异或;任何数和一相与都是本身,任何数和零相或都是本身;清零:和零相与;计算机输入的数据都是把它当作十进制数来计算的,数据进行初始化的时候也是当作十进制进行初始化的,只不过存储数据存的是二进制;因此,问题产生了:操作之后的数据x怎么输出?输出十进制?八进制?十六进制?二进制?注意:C语言没有二进制输出,因此我们要把十进制转化为二进制输出!数字按照二进制输出方法(补位操作): x&01得到最低位; (x>>1)&01就把次低位移到最低位并取出最低位; …… (x>>7)&01就把最高位移到最低位并取出。 但这种方法,输出结果是先输出最低位,最后输出最高位,但我们需要先输出最高位!
问题: 程序2中,对第六位让它与自身进行异或,其他都为0这样对吗?感觉不太对。。。最后输出二进制的方法中,右移操作为什么是补位操作,移位操作不都是补零吗?
7. 其他运算:三目运算、逗号结合运算、长度运算 三目运算(条件语句的简化形式):基本形式:e1?e2:e3 作用:若e1为真,那么表达式结果取e2,否则取e3,例如:a>b?a:b(实现了找出较大值的功能) 逗号结合运算(常用于循环语句中,可以分别对多个变量进行操作):一般形式:表达式1,表达式2,...,表达式n 求解过程:先求表达式1,最后求表达式n,它是按照顺序从左到右计算的,因此最后整个逗号表达式的值为表达式n的值。例如:x = (a=100,b=10,c=1000); // 最后x的值为1000。 长度运算:一般形式:sizeof(数据类型说明符或者变量名) 作用:求解某种数据类型或者变量名的长度,它是以字节为单位的。例如:sizeof(double)=8。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |