您的位置:首页 > 其它

C言语教程第二章: 数据范例、运算符、表达式(6)

2011-03-07 18:49 351 查看
强迫范例转换
强迫范例转换是颠末范例转换运算来完成的。其伟大体领为: (范例说明');符) (表达式) 其听从是把表达式的运算成果强迫转换成范例说明');符所示意的范例。比喻: (float) a 把a转换为实型(int)(x y) 把x y的成果转换为整型在运用强迫转换时应寄望以下成果:
1.范例说明');符和表达式都必需加括号(单个变量可以不加括号),如把(int)(x y)写成(int)x y则成了把x转换成int型之后再与y相加了。
2.无论是强迫转换或是主动转换,都只是为了本次运算的需求而对变量的数据长度抑制的一时性转换,而不改动数据说明');时对该变量界说的范例。
main()
{
float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
}
f<--5.75
把float f强迫转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例标明,f虽强迫转为int型,但只在运算中起浸染, 是一时的,而f自身的范例并不改动。因而,(int)f的值为 5(删去了小数)而f的值仍为5.75。

基本运算符和表达式

运算符的种类、优先级和联合性
C言语中运算符和表达式数目之多, 在初级言语中是少见的。恰是丰盛的运算符和表达式使C言语听从很是完美。 这也是C言语的紧张特点之一。
C言语的运算符不但具有分比喻的优先级, 并且尚有一个特点,便是它的联合性。在表达式中, 各运算量参与运算的先后序次不但需成果运算符优先级其余规定礼貌,还要受运算符联合性的制约, 以便确定是自左向右进交运算仍是自右向左进交运算。 这种联合性是别的初级言语的运算符所没有的,因而也增添了C言语的庞大性。

运算符的种类C言语的运算符可分为以下几类:
1.算术运算符
用于各种数值运算。网罗加( )、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增( )、自减(--)共七种。
2.干系运算符
用于对照运算。网罗大于(>)、小于(<)、便是(==)、 大于便是(>=)、小于便是(<=)和不便是(!=)六种。
3.逻辑运算符
用于逻辑运算。网罗与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进交运算。网罗位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值( =,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
6.条件运算符
这是一个三目运算符,用于条件求值(?:)。
7.逗号运算符
用于把若干表达式组分解一个表达式(,)。
8.指针运算符
用于取内容(*)和取地址(&)二种运算。
9.求字节数运算符
用于较量争论数据范例所占的字节数(sizeof)。
10.额外运算符
有括号(),下标[],成员(→,.)等几种。

优先级和联合性
C言语中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进交运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的联合性所规定礼貌的联合方向处理。 C言语中各运算符的联合性分为两种,即左联合性(自左至右)和右联合性(自右至左)。比喻算术运算符的联合性是自左至右,即先左后右。如有表达式x-y z则y应先与“-”号联合, 执行x-y运算,然后再执行 z的运算。这种自左至右的联合方向就称为“左联合性”。而自右至左的联合方向称为“右联合性”。 最榜样的右联合性运算符是赋值运算符。如x=y=z,因为“=”的右联合性,应先执行y=z再执行x=(y=z)运算。 C言语运算符中有不少为右联合性,应寄望区别,以抑制相识错误。

算术运算符和算术表达式基本的算术运算符
1.加法运算符“ ”加法运算符为双目运算符,即应有两个量参与加法运算。如a b,4 8等。具有右联合性。
2.减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左联合性。
3.乘法运算符“*”双目运算,具有左联合性。
4.除法运算符“/”双目运算具有左联合性。参与运算量均为整型时, 成果也为整型,舍去小数。假设运算量中有一个是实型,则成果为双精度实型。
void main(){
printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
}
双目运算具有左联合性。参与运算量均为整型时, 成果也为整型,舍去小数。假设运算量中有一个是实型,则成果为双精度实型。 printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
本例中,20/7,-20/7的成果均为整型,小数扫数舍去。而20.0/7和-20.0/7因为有实数参与运算,因而成果也为实型。
5.求余运算符(模运算符)“%”双目运算,具有左联合性。要求参与运算的量均为整型。 求余运算的成果便是两数相除后的余数。
void main(){
printf("%d\n",100%3);
}
双目运算,具有左联合性。求余运算符% 要求参与运算的量均为整型。本例输出100除以3所得的余数1。

自增1,自减1运算符
自增1运算符记为“ ”,其听从是使变量的值自增1。自减1运算符记为“--”,其听从是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右联合性。可有以下几种要领: i i自增1后再参与别的运算。--i i自减1后再参与别的运算。
i  i参与运算后,i的值再自增1。
i--  i参与运算后,i的值再自减1。
在相识和运用上轻易犯错的是i 和i--。 希罕是当它们出在较庞大的表达式或语句中时,常常难于弄清,因而应仔细阐发。
void main(){
int i=8;
printf("%d\n", i);
printf("%d\n",--i);
printf("%d\n",i );
printf("%d\n",i--);
printf("%d\n",-i );
printf("%d\n",-i--);
} i<--8
i<--i 1
i<--i-1
i<--i 1
i<--i-1
i<--i 1
i<--i-1 int i=8;
printf("%d\n", i);
printf("%d\n",--i);
printf("%d\n",i );
printf("%d\n",i--);
printf("%d\n",-i );
printf("%d\n",-i--);
i的初值为8
第2行i加1后输出故为9;
第3行减1后输出故为8;
第4行输出i为8之后再加1(为9);
第5行输出i为9之后再减1(为8) ;
第6行输出-8之后再加1(为9);
第7行输出-9之后再减1(为8)
void main(){
int i=5,j=5,p,q;
p=(i ) (i ) (i );
q=( j) ( j) ( j);
printf("%d,%d,%d,%d",p,q,i,j);
}
i<--5,j<--5,p<--0,q<--0
i i i--->p,i 1-->i,i 1-->i,i 1-->i
j 1->j,j 1->j,j 1->j,j j j->q int i=5,j=5,p,q;
p=(i ) (i ) (i );
q=( j) ( j) ( j);
这个步伐中,对P=(i ) (i ) (i )应相识为三个i相加,故P值为15。然后i再自增1三次相称于加3故i的末端值为8。而草率q 的值则不然,q=( j) ( j) ( j)应相识为q先自增1,再参与运算,因为q自增1三次后值为8,三个8相加的和为24,j的末端值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的样式。 一个表达式有一个值及其范例, 它们便是较量争论表达式所得成果的值和范例。表达式求值按运算符的优先级和联合性规定礼貌的序次抑制。 单个的常量、变量、函数可以看作是表达式的特例。

版权声明:
原创作品,答应转载,转载时请务必以超链接要领标明文章 原始来因 、作者信息和本声明。不然将清查执法责任。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: