+ -
当前位置:首页 → 问答吧 → 前两天同桌一道简单的面试题,欢迎高手指教

前两天同桌一道简单的面试题,欢迎高手指教

时间:2010-07-04

来源:互联网

  1. #include <stdio.h>

  2. int mian(void)
  3. {
  4.     unsigned char a = 127;
  5.     char b = a+1;
  6.     short c = a+1;
  7.     long d = a+1;   
  8.     double e = a+1;

  9.     printf("0x%x,0x%x,0x%x,0x%x\n",b,c,d,e");
  10.    
  11.     return 0;
  12. }
复制代码
请问大牛人输出什么?

作者: 0vk0   发布时间: 2010-07-04

1.不好说
  1. char b
复制代码
这样的表示b究竟是signed还是unsigned的标准里面没有说明

2.这里面有Integer promotion, printf的 %x 需要的是一个unsigned int
假设你的环境里面char表示的signed char,那么 b (0x80)经过integer promotion变成int之后的表示就是0xffffff80(注意符号扩展,因为b是有符号的),然后再将int 转化为unsigned int (其实转不转换无所谓)经由 %x输出

3.整数和浮点的表示是很不同的,自己复习ieee 的浮点表示形式,要手工计算e还是要花点时间的

作者: churchmice   发布时间: 2010-07-04

又是面试题,标明系统,编译器,多少位。

不然,鬼知道那鸟编译器到底会怎么处理呢


这种问题,如果是面试我,直接走,破公司老子不稀罕。

作者: linuxlixk   发布时间: 2010-07-04

就假设成 32位 linux  gcc吧。

作者: tpli   发布时间: 2010-07-04

环境:32位 linux 系统

编译器:GCC

作者: 0vk0   发布时间: 2010-07-04

难道所有的都是0xffffff80?

作者: 0vk0   发布时间: 2010-07-04

难道所有的都是0xffffff80?

作者: 0vk0   发布时间: 2010-07-04

unsigned char

作者: coac   发布时间: 2010-07-04

程序都写错了,输出啥?
int mian(void)
printf("0x%x,0x%x,0x%x,0x%x\n",b,c,d,e");

作者: X-Hawk   发布时间: 2010-07-04