表达式 5 + 10 * 20 / 2 的求值结果是多少?
105。
根据4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后运算对象的组合顺序与添加括号前一致。
*(vec.begin())
(*(vec.begin())) + 1
C++语言没有明确规定大多数二元运算符的求值顺序,给编译器优化留下了余地。这种策略实际上是在代码生成效率和程序潜在缺陷之间进行了权衡,你认为这可以接受吗?请说出你的理由。
可以接受。C++的设计思想是尽可能地“相信”程序员,将效率最大化。然而这种思想却有着潜在的危害,就是无法控制程序员自身引发的错误。因此 Java 的诞生也是必然,Java的思想就是尽可能地“不相信”程序员。
在下面的表达式中添加括号,说明其求值过程及最终结果。编写程序编译该(不加括号的)表达式并输出结果验证之前的推断。
12 / 3 * 4 + 5 * 15 + 24 % 4 / 2
((12/3)*4) + (5*15) + ((24%4)/2)
写出下列表达式的求值结果。
-30 * 3 + 21 / 5 // -90+4 = -86
-30 + 3 * 21 / 5 // -30+63/5 = -30+12 = -18
30 / 3 * 21 % 5 // 10*21%5 = 210%5 = 0
-30 / 3 * 21 % 4 // -10*21%4 = -210%4 = -2
写出一条表达式用于确定一个整数是奇数还是偶数。
if (i % 2 == 0) /* ... */
溢出是何含义?写出三条将导致溢出的表达式。
当计算的结果超出该类型所能表示的范围时就会产生溢出。
short svalue = 32767; ++svalue; // -32768
unsigned uivalue = 0; --uivalue; // 4294967295
unsigned short usvalue = 65535; ++usvalue; // 0
说明在逻辑与、逻辑或及相等性运算符中运算对象的求值顺序。
解释在下面的if语句中条件部分的判断过程。
const char *cp = "Hello World";
if (cp && *cp)
首先判断 cp
,cp
不是一个空指针,因此 cp
为真。然后判断 *cp
,*cp
的值是字符 ‘H’,非0。因此最后的结果为真。
为while 循环写一个条件,使其从标准输入中读取整数,遇到 42 时停止。
int i;
while(cin >> i && i != 42)