%取余数
5%3=2
&位的和
2&3=2
|位或
2|3=3
!非
!2=0
&&和
3&&5为禅差禅真
4&&0
为假
||或
3||0为真
0||0为假
+=
相当于
a+=b
a=a+b,其他相似
如*=
-=
/=
<<
位向左移
>>位向右移
sizeof
确定占的空间大小
sizeof(int)
><
>=
<=这就是大于小庆绝于大于等于,小于等于
a?b:c判断,如果a为真,则返回b,否则返回c
!=不等于
++
——自增自减,a--相当于a=a-1
2、运算符贺尘优先级:
如果真正掌握了C 语言,你就能很轻易的回答上来。这个问题就请读者试着回答一下吧。本章不会像关键字一样一个一个深入讨论,只是将容易出错的地方讨论一下。
表(2.1)标准C 语言的基本符号
C 语言的基本符号就有20 多个,每个符号可能同时具有多重含义,而且这些符号之间相互组合又使得C 语言中的符号变得更加复杂起来。
你也许听说过“国际C 语言乱码大赛(IOCCC)”,能获奖的人毫无疑问是世界顶级C程序员。这是他们利用C 语言的特点极限挖掘的结果。下面这个例子就是网上广为流传的一个经典作品:
#i nclude <stdio.h>
main(t,_,a)char *a{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\#q#n+,/+k#*+,/'r :'d*'3,}{w+K w'K:'+}e#'dq#'l \q#'+d'K#!/+k#q#'r}eKK#}w'r}eKK{nl]'/##q#n'){)#}w'){){nl]'/+#n'd}rw' i# \){nl]!/n{n#'r{#w'r nc{nl]'/#{l,+'K {rw' iK{[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i:{nl]'/*{q#'ldr'}{nlwb!/*de}'c \{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \}'+}##(!!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"告早!ekdc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-Om.vpbks,fxntdCeghiry"),a+1)}
还没发狂?看来你抵抗力够强的。这是IOCCC 1988 年获奖作品,作者是Ian Phillipps。
毫无疑问,Ian Phillipps 是世界上最顶级的C 语言程序员之一。你可以数数这里面用了袜芦雀多少个符号。当然这里我并不会讨论这段代码,也并不是鼓励你也去写这样的代码(关于这段代码的分析,你可以上网查询哗橡)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)