如题所述
//我们来看一个问题,可以帮助你理解
执行下面的程序段
int x = 40;
char z = 'B';
int B;
B = ( ( x&0xff )&&( z>'a' ) );后
B的值为( )
正确答案是 0.
下面我给你解释。
//( x&0xff )
OX的意思是16进制
OXFF代表的2进制是 0000 0000 1111 1111
那么 x&0xff 表示 将x的值和上面的二进制数 相与
比如 x = 40,那么它对应的2进制为 0000 0000 0010 1000
它和 0xff 相与还是 40 ,也就是
0000 0000 1111 1111
& 0000 0000 0010 1000
-------------------------
0000 0000 0010 1000
// ( z > 'a' )
那么对于字符 z, 它的初始值为'B'
那么 z > 'a' 这个表达式的值为假
为什么呢,
因为在ascii码中, 'B' 的ascii为 66, 而 'a'的 ascii为 97
因为 97 > 66, 所以 z < 'a' 而不是 z > 'a'
故表达式 (z > 'a') 的值为false
//&&运算
&& 的左边是40 , 在C语言中 0 代表false 而非零的数代表true,那么左边为true
&& 的右边是 false
那么整个表达式的 值 肯定为 false。
所以最后 B = 0
就是这样。
温馨提示:答案为网友推荐,仅供参考