Jan 21, 2008

The C Puzzle Book (C语言解惑)读书笔记

每年在火车回家坐火车都是一种折磨,不过这次运气不错,一来认识了两个聊得来的朋友,二来带了一本《The C Puzzle Book》,翻翻看看,隔了一年多没碰C,有些问题是实实在在地不会,有些问题是自己粗心得挺搞笑。

Chapter 1 操作符
a. z+=-x ++ + ++y ==> z+=-(x++) + (++y)
but, x+++++y ==> x++ ++ +y 无意义
b.~01 == 1…10 != 10 ^_^
c. ~x|x == 111.. 1 恒等于 -1
d.y = -8; y >>= 3 y并不一定为-1,有些计算机右移时不保留操作数的符号位
e. z += x z+= (xf. z>=y>=z ^_^
简简单单的符号优先级问题本来以为背熟了表就差不多,可还是错了上面几个,蛮郁闷。

Chapter2 基本类型
a. define PRINT(format,x) Printf(#x " = %" #format "\n", x)
PRINT (d,"5") ?
显然打印的是指针地址,不过刚看时笨得没发现
int x= -2, unsigned int ux = -2 PRINT(o,x) PRINT(o,ux) ?
无论带符号还是无符号,-2都是那串01
b. 3.(注意后面那个.) …………
c. c语言中,即使运算发生了溢出,结果仍将是合法的数值。
主要是向上向下转型的问题,结合运算符优先级,挺容易搞混的。细节,细节!

Chapter3 头文件
#define PR (fmt, val) printf(#val " = %" #fmt "\t", (val))
#define NL putchat('\n')
#define PRINT1 (f,x1) PR(f,x1), NL
#define PEINR2 (f,x1,x2) PR(f,x1), PRINT1(f,x2), NL
... ...
一层一层往下套吧。。

Chapter4 控制流
a.if也能短路的哦
b.if( x=y ); x=3 看见那个分号了没?呵呵
c.while( y<10 ){x=y++; z=++y;} y++了两次哦,大意大意。

Chapter5 编程风格

0 comments: