双目运算符是指运算所需变量为两个的运算符,或者要求运算对象的个数是2的运算符称为双目运算符;运算所需变量为一个的运算符叫单目运算符,例如【!,~,()】;运算所需变量为三个的运算符叫三目运算符:【?:】
乘法运算符【*】、除法运算符【/】、取余运算符【%】 、加法运算符【+】、减法运算符【-】。
扩展资料:
初等运算符 :下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】
关系运算符:等于运算符【==】、不等于运算符【!=】 、关系运算符【<><= >= 】
逻辑运算符:逻辑与运算符【&&】 、逻辑或运算符【||】、逻辑非运算符【!】
位运算符:按位与运算符【&】、按位异或运算符【^】 、按位或运算符【|】、左移动运算符【<<】、右移动运算符【>>】
参考资料来源:
百度百科-双目运算符
单目运算符是指运算所需变量为一个的运算符,即在运算当中只有一个 *** 作数,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符:~、自增自减运算符:++, --等。
运算所需变量为两个的运算符叫做双目运算符,或者要求运算对象的个数是2的运算符称为双目运算符。
逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++, --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*和&】、长度运算符【sizeof】
扩展资料:
一些只需要一个 *** 作数的运算符称为一元运算符(或单目运算符)。
例:5 + 6 和 5++ ------在C语言中,5++是非法的。
前者5 和 6为 *** 作数+ 为运算符,但是 + 需要两个 *** 作数,所以它不是一元运算符,而是二元运算符,而后者只需要一个 *** 作数,所以 ++ 为一元运算符。
一元运算符有:"delete"、”sizeof"、“void”、'+'——正号,'-'——负号,'!', '++', '--' , '~'——位非,返回数字的非。
1.双目运算概念
双目运算由双目运算符和参与运算的运算量构成。所谓双目运算符是指该运算符的左右两侧都必须有运算量。
常见的双目运算符有:+、-、*、/、%等。诸如x+y、x/y、x*y等运算均为双目运算。
2.
双目运算的要点
遇到双目运算,主要注意数据类型问题。具体有以下几点:
(1)
C语言要求:参与双目运算的两个运算量的类型必须一致;
(2)
双目运算的结果的类型必须与运算量的类型一致;
(3)
如果参与双目运算的两个运算量类型不一致,系统将自动把其中的一个进行类型转换,使两个运算量的类型一致后再进行运算。
自动转换的规则是:按“向高看齐”的原则进行转换。在几个基本的数据类型中,由高到低的排列顺序为:double,int,char。
比较:赋值运算中的类型转换
在赋值运算中,若遇到赋值号两侧的数据类型不一致,则也存在自动类型转换的问题,不过,它的转换规则与双目运算符的转换规则有所不同,它是按“向左看齐”的原则进行转换的,也即,是将赋值号右侧的量先转换为左侧的类型,然后再进行赋值。如有
int
x
x=1.9
则先将1.9转换为int型,变为1后再赋值给x。再如,double
y
y=2
则先将2转换为2.0,然后再赋值给y,结果y的值为2.0。
举例说明:
(1)
表达式
3+2
中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,结果为5,也是整型。
(2)
表达式
3/2
中,3和2类型一致(都是整型),符合双目运算的类型一致要求,所以直接运算,但要注意,由于两个运算量都是整型,所以运算结果也必须是整型,3除以2的整数部分为1,所以3/2的结果是1,而不是2,更不是1.5,这是整数除法中特别要注意的地方。
又如19/5的整数部分是3,尽管其小数部分为0.8(超过了0.5),但19/5的结果仍然应该等于其整数部分的值3,而不能进行四舍五入变为4。
(3)
表达式
1.0+3
中,量个运算量的类型不一致,所以不能直接进行加法运算,必须先将整数3转换为double型常量3.0(注意,C中实数常量均为double型,而不是float型!),使表达式变为
1.0+3.0,然后才能进行加法运算,运算结果为4.0(不能写成整型4)。
又如,表达式
1.0+3/2
中,由于/运算符的优先级比+高,所以先运算3/2,刚才已经讲过,3/2的值应该为1,于是整个表达式变为
1.0+1(注意不要因为前面有一个1.0而把3/2的结果当作为1.5!),然后再将1作类型转换,变为1.0,最后再运算1.0+1.0,结果为2.0。
上述例子中的运算量均为常量,遇到变量时运算方法是一样的!
3.
双目运算实例
这是2000年4月二级C考试中的一道选择题:
下列程序的输出结果是
A)
3
B)
3.2
C)
0
D)
3.07
main()
{
double
d=3.2
int
x,y
x=1.2
y=(x+3.8)/5.0
printf("%d
\n",
d*y)
}
本题中,程序先执行语句
x=1.2,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量x的值1转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0。因此该题的输出结果应该是0。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)