C语言运算符的注意问题
时间:2015-05-13 00:53:08
收藏:0
阅读:159
//对于自增和自减运算符的运算规律值得研究,小心被坑。
1 #include<stdio.h> 2 int main(void){ 3 int i=5,j=5,p,q; 4 p=(i++)+(i++)+(i++); 5 q=(++j)+(++j)+(++j); 6 printf("p=%d,q=%d,i=%d,j=%d",p,q,i,j); 7 return 0; 8 }
他的运行结果:
q=(++j)+(++j)+(++j)按理应该是21的啊!
原来:对于 q=(++j)+(++j)+(++j),先计算 (++j)+(++j),因为是“前自加”,要先计算两次 ++j,此时 j=7,然后相加,相当于 7+7,结果为14;然后计算 14+(++j),相当于 14+8,结果为22。
这就是Fedora 平台特点,其他平台可以自测。
类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
- 实型赋予整型,舍去小数部分。
- 整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
- 字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
复合的赋值运算符
在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
评论(0)