论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 1188阅读
  • 1回复

[软件开发]5.5 运算符问题 [复制链接]

上一主题 下一主题
 
发帖
141299
黑豆
-2859
威望
-2709
贡献值
0
交易币
0
红豆
0
只看楼主 倒序阅读 0 发表于: 2013-09-09
面试例题1:下面程序的结果是多少?[中国台湾某著名CPU生产公司2010年7月面试题]
#include <iostream>
using namespace std;

int main()
{
unsigned char a=0xA5;
unsigned char b=~a>>4+1;
//cout <<b;
printf("b=%d
",b);
return 0;
}
A.245 B.246 C.250 D.2
解析:这道题目考查两个知识点:一是类型转换问题;二是算符的优先级问题。
对于第一个问题:unsigned char b=~a>> 4,在计算这个表达式的时候,编译器会先把a和4的值转换为int类型(即所谓整数提升)后再进行计算,当计算结果出来后,再把结果转换成unsigned char赋值给b。
对于第二个问题:因为“~”的优先级高于“>>”和“+”,本题的过程是这样的:先对于1010 0101 取反 0101 1010;再右移,这里有一个问题,是先右移4位再加1呢,还是直接右移5(4+1)位。因为“+”的优先级高于“>>”,所以直接右移5位。结果是0000 0010。
最后的结果应该是2才对,但把如上的指令放到vs2008中运行,答案居然是250。
那么到底是什么地方出了问题?在调试的过程中进入汇编指令。可以看到高级语句
阅读全文地址:http://book.2cto.com/201307/27214.html
快速回复
限100 字节
 
上一个 下一个