求解一题:关于左移和右移的知识点
例2.9 设c为一个字符,且(c<<3==c>>3)&&c>0为真,问c的字符代码是什么?
解:因为(c<<3==c>>3)&&c>0为真,所以c<<3==c>>3和c>0均为真.于是可设c是如下形式的符号:
0???????
其中问号"?"表示尚不确定的值.
c<<3后: ?????000 (1)
c>>3后: 0000???? (2)
由于(1)和(2)相等,所以(1)和(2)的二进制形式均是
00001000 (3)
由于(3)是由c字符左移3位或者右移3位得到,所以c字符的代码应是01000001,所以,c=01000001(二进制)=0101(八进制)=‘A’。
疑问:为什么(3)是由c字符左移3位或者右移3位得到,所以c字符的代码为01000001?
[解决办法]
这个问题其实很好理解
c<<3后: ?????000 (1)
c>>3后: 0000???? (2)
1=2;
所以移动后的数组是000??000的形式。说明1,2位和7,8位的01表达是一样的。其他位置都为0
所以就有四种可能
00,11,10,01
00前三种导致c的值《=0
由于条件说c》0
所以只有01000001之一种可能