signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
分析:坑爹丫,有木有!10 个人 9 个这个恐怕都不敢确定!(敢肯定的要么是高手,要么就是错的!) B me 认为是错的,一个 uchar 和一个 schar 比较,真的就是一个字节在比较吗?C me 认为是对的,将一个 schar 赋值给一个 uint,要不要符号扩展呢?是绝对会还是可能会呢?细节到底是神马?O__O"…A 貌似比较确定,肯定是错的,肯定?
揭露真相:A 确实是错的,B 也是错的,C 是对的,所以 D 也是错的。理由?A 错是因为,a 是负数,c 是正数,即使跟 0 比较要转换到 int(后面暂不区分转换和类型提升,总之就是类型变了),也是一负一正,所以 A 错。B 呢?是说一正一负不会相等,难道是因为这吗?难道不是吗?首先说 a 和 c 的二进制表示一模一样,都是 0xe0,那么比较就不相等?!是的,比较的时候全部转换为 int,所以呢,a 还是作为一个负数存在,c 作为一个正数存在,于是就不相等了,所以 B 错。C 肿么就对了?a 是一个 schar,赋值给 uint 的 b,前若干个字节不是补 0 吗?首先 schar 转换为 int,然后 int 转换成 uint,所以最初是符号扩展,然后一个 int 赋值给了 uint,C correct!me 曾经要写一篇关于c的类型以及指针的 blog,不过最后没有完成,不过还是可以参考一下的。
下面哪些选项能编译通过?
int i;
char a[10;
string f();
string g(string &str);
A. if(!!i){f();} B. g(f()); C. a=a+1; D. g("abc");
分析:再次坑爹有木有!(其实 me 比较确信这道题,是坑别人的爹,O__O"…)A 绝对是正确的,C 绝对是错的,D 基本肯定是错的,那 B 呢?要么 error ,要嚒 warning!如果是 warning 但是没有 error ,这算神马情况呢?B 确实不应该选,至少语义上不该选!f() 返回一个临时量,然后传给 g 函数,而 g 的参数是非 const 引用,是不能引用临时量的!为嘛,如果 g 中修改了传进来的 string,那么会是怎么一回事呢?修改了一个临时量的值?那这意义何在呢?但是如果将 g 的原型修改为 string g(const string&); 就是可以的,为么可以?访问(只读)临时量就是正确的?那必须的,比如 u 可能想知道 a+b 的结果是多少,然后输出!a+b 的结果就是一个临时量。如果说修改 a+b 的结果,这是神马个逻辑?!
真相:C 错是以为 a 是一个地址常量,不可能再被赋值。D 为嘛错呢?"abc" 的类型可是 const char* 呢,是个常量指针呢!(可以用来初始化 string。)
int a[10]; 问下面哪些不可以表示 a[1] 的地址?
A. a+sizeof(int) B. &a[0]+1 C. (int*)&
腾讯实习生招聘笔试题目[教育] 来自淘豆网m.daumloan.com转载请标明出处.