已知字符串 s = "C++ Programming",下列程序运行的结果是( )
cout << (int)(s.length() | 3) << endl;答案B。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。
位运算追踪时建议把数字写成二进制形式再逐位计算。
本题考查《GESP 考试大纲》三级「基础语法与运算」模块中位运算符与类型转换的复合考查。命题人卡住的是考生对 size_t 与 int 混合运算时类型提升规则的盲区——绝大多数学生只会机械计算长度,却忽略位运算优先级高于隐式转换,导致在遇到 (int)(expr | 3) 这类结构时产生误判。
看到 cout << (int)(s.length() | 3) 先提取核心表达式。s.length() 返回 15(size_t 类型,二进制 1111),3 是 0011。按位或运算:1111 | 0011 = 1111 仍为 15。外层 (int) 强制转换不改变数值。通法:遇到混合运算符,先确定优先级(位运算符高于隐式转换),再从左到右计算,最后留意类型转换是否影响结果。