C语言操作符
C语言里面有很多操作符,按照我的个人,我会将它们分为以下两种:
1、常用的操作符(很容易理解并被使用的):+、-、*、/、=、==、!=、<、>、<=、>=、&&、||、!、++、--、+=、-=、*=、/=。
2、不常用的操作符(意义比较复杂,大家都不太喜欢用的那种):<<、>>、~、^、&、|、&(取地址)、*(解引用)、1?2 :3(条件运算符)、,(逗号表达式)、sizeof(你没看错,这是操作符)。
再次郑重宣布:这种分类方法是我自己分的,并不是正确的分法。
首先说一下分类1,分类1是根据我学了第一遍c语言之后比较熟知的操作符,当然也是经常用的;而分类2就不一样了,分类2是我第二遍c语言正在学的操作符,因为很多都只是知其名不知其用法。
C中某些操作符不为人知的属性
各种运算符的功能我就不说了吧!在此我只说一说他们在用的过程中经常给初学者门造成问题的特殊属性。
从头说起:
1、重点!重点!重点! && 和 || 两种运算符是有选择性执行的!!! 当&&前面的表达式为假时,其后面的表达式不在进行计算,整个式子直接为假,记住!是不再进行计算,直接跳过。当||前面的表达式为真时,后面的表达式不再计算类同于&&。
2、重点!重点!重点!写代码的时候一定不要用++或者--进行连加,或者连减,什么意思呢?看下面代码:
int a = 1;
int b = 0;
b = (++a)+(++a)+(++a);
估计会有人说,这不是很简单吗,这时候他已经错了。其实这个代码时错误的,为什么时错误的呢?我们来分析一下:
从第三个表达式中可以看出在计算时只要满足相应的优先级和结合性就行了,来来来看看:
第一种方法:先进行三个 ++a 的运算,三个 ++a 后 a 变为 4 。接着我们再将三个数相加,得出结果为 12 对不对。很好,继续往下看!
第二种方法:先进行前两个的 ++a 运算,将运算的结果相加,再进行第三个 ++a ,最后再相加,得出结果为 3+3+4 = 10 对不对。很好,精彩的还在下面!
第三种方法:先进行第一个 ++a 将结果存起来,再计算第二个 ++a 将结果再存起来,两个结果相加,之后进行第三个 ++a 的运算,再将其所有加起来得 2+3+4 = 9 。
以上三种方法你会发现都是满足相应的优先级和结合性的,只是看你采取哪一种方法喽!而在计算机里就决定于编译器了,编译器想用哪种方式就用哪种方式,实测,vs、vc、linux的编译器结果都不同。所以说,对++或者--进行连加连减时最好分布计算,既容易理解,也的出来的结果唯一。
3、 << 和 >> 运算符是有陷阱的:
b = a << 1;
b = a >> 1;
!!! 当我第一次计算这段代码时,计算之后 a 的值时不变的,只是对 a 进行了运算而已。!!!
4、最不常见的 , (逗号表达式):用其连接起来的表达式时按照顺序计算的,但整个表达式的值为值后一个表达式的值,特殊用法如下:
表达式1;
表达式2;
while(判断式)
{
表达式1;
表达式2;
}
其可以变化为:
while(表达式1,表达式2,判断式)
{
}
有没有感觉到逗号表达式很diao?其实合理运用可以使你的代码更加的精炼。
5、sizeof 语句注意事项:
! sizeof 后面是可以接数据类型的,但是必须得带括号例如:sizeof(int);
! sizeof 后面接数组名时指的整个数组,并不是数组的第一个元素的地址。
! sizeof 里面的表达式并不计算:
sizeof(a++);
其中执行完后a不自增,sizeof只是查看a的类型并计算其所占的空间。