第二章 类型符号表达式:
2.9
按位与 & 可用于屏蔽某些二进制位 如:n &= 0177
按位或 | 可以将某些位置1 如:n |= 011
按位取反 可以用于如将后六位置0 : n &= ~077;这样的用法比 n &= 0177700这样的表达式好很多,前者可移植性强。
左移右移的右值不能为负;
return(x>>(p+1-n)) & ~(~0<<n); 返回X中右起p位开始向右的n位数;
2.10
x *= y+1 等价于 x = x * (y+1);
将变量声明为无符号型可以保证右移的时候不论在什么机器上运行都能用0来填补而不是符号位;
2.11
a?b:c //首先计算a,如果不为0 则计算b并以该值作为条件表达式的值,否则计算c以其为表达式的值。
Z = (a>b) ? a:b // z = max (a,b)
示例: 每行打印10个元素,每列间用一个空格隔开,每行用一个换行符
for(i = 0;i<n;i++)
printf("%6d%c" , a[i] ,(i%10 == 9 || i == n-1) ? '\n' : ' ');
2.12
printf("%d %d\n",++n,power(2,n)) // 不同编译器可能有不同的结果
a[i] = i++; //也是取决于编译器的解释,C语言标准并未对这类问题 作具体规定;
如果代码的执行结果与求值顺序相关,则是不好的程序设计风格;