练习4.25
如果一台机器上int占32位、char占8位。用的是Latin-1字符集,其中字符‘q’的二进制形式是01110001,那么表达式~‘q’<<6的值是什么?
解答:
#include <iostream>
using namespace std;
int main(){
cout <<hex<< (~'q' << 6) << endl;
}
结果用十六进制来表示
ffffe380
为什么最后是32位的表达方式,因为在取反操作的执行的之后,数字的类型已经转换为int型,然后在左移了6位,得到了上面的数。
练习4.26
在本节关于测验成绩的例子中,如果使用unsigned int作为quiz1的类型会发生什么情况?
解答:
这个可能要和系统是多少位的挂钩了。
在32bit系统下,或者高于32bit的系统中应该是没有区别的,因为 int所占位数<= long所占位数。
但,当使用的系统是16位,那么int的位数就不够用了,这里会因为位移大于最大位移数,而产生不可预期的结果。
练习4.27
下列表达式的结果是什么?
unsigned long u11 = 3, u12 = 7;
(a) u11 & u12
(b) u11 | u12
(c) u11 && u12
(d) u11 || u12
解答:
这里区分一下逻辑判断操作和逻辑运算操作。
(a) 3
(b) 7
(c) true
(d) true