昨天笔试的一道题

dclchj 2011-08-17 09:10:19
这道题我应该是挂了:

谈谈对下面代码片段的看法:

unsigned int ZERO = 0;
unsigned int COMPZERO = 0xFFFF;

大家先不要百度,试试能说出什么?
...全文
393 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsp970219 2011-08-19
  • 打赏
  • 举报
回复
COMPZERO即使在16位下也是unsigned, 何来-1?
xiaoxiao346691378 2011-08-19
  • 打赏
  • 举报
回复
请问您笔试的那家单位是不是南京的??
AndyZhang 2011-08-19
  • 打赏
  • 举报
回复
这个和编译环境,机器都有关
dclchj 2011-08-19
  • 打赏
  • 举报
回复
不是,是杭州的[Quote=引用 23 楼 xiaoxiao346691378 的回复:]
请问您笔试的那家单位是不是南京的??
[/Quote]
dclchj 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 excited_lamb 的回复:]
引用 19 楼 dclchj 的回复:
我以为 COMP 是 compare ,写了些跟0比大小的东西。--!
说明我对 complement 不敏感,被测出来了。

你的意思是题目本身就没注释的嘛?
[/Quote]没有的,不过对方是嵌入式行业。
jernymy 2011-08-17
  • 打赏
  • 举报
回复
unsigned int ZERO = 0;
unsigned int COMPZERO = 0xFFFF;

16位机子上COMPZERO是-1
32位机子上COMPZERO是0xFFFF;

如果正确的写法应该是
unsigned int COMPZERO = ~0;
excited_lamb 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 dclchj 的回复:]
我以为 COMP 是 compare ,写了些跟0比大小的东西。--!
说明我对 complement 不敏感,被测出来了。
[/Quote]
你的意思是题目本身就没注释的嘛?
dclchj 2011-08-17
  • 打赏
  • 举报
回复
这个是正解了^.^
[Quote=引用 9 楼 zmlovelx 的回复:]
unsigned int ZERO = 0;
unsigned int COMPZERO = ~0;
[/Quote]
dclchj 2011-08-17
  • 打赏
  • 举报
回复
我以为 COMP 是 compare ,写了些跟0比大小的东西。--!
说明我对 complement 不敏感,被测出来了。
dclchj 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 babilife 的回复:]
楼上都说了,你如果考得是16位单片机的话,这题还有考头

》16位机上木啥名堂
[/Quote]确实,对方是嵌入式相关的。
excited_lamb 2011-08-17
  • 打赏
  • 举报
回复
/*1's complement of zero */

LZ你的这个注释到哪去了?怪不得我一开始没看懂
modicum_lf 2011-08-17
  • 打赏
  • 举报
回复


unsigned int ZERO = 0;
unsigned int COMPZERO = 0xFFFF; // 变量名都告诉我们是0的补码了呀 ,你怎么还挂了,郁闷
/*1's complement of zero */

对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:

unsigned int compzero = ~0;



luciferisnotsatan 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 excited_lamb 的回复:]

引用 7 楼 lxyppc 的回复:
如果没有上下文,只能猜测

变量名全大写,猜测是常量定义,可以加const在前面(假设是C++语境)
根据变量字面意思,COMPZERO猜测是complement zero的意思,即~0,写成unsigned int COMPZERO = ~ZERO;更加好一些

实际情况中可以根据上下文得到确切意义

为什么要这样,LZ的写法
int 如……
[/Quote]
是16位没问题。其他的会有问题。
比如32位,结果就是 0x0000FFFF,不是~0的0xFFFFFFFF
至善者善之敌 2011-08-17
  • 打赏
  • 举报
回复
楼上都说了,你如果考得是16位单片机的话,这题还有考头

》16位机上木啥名堂
luofeng619 2011-08-17
  • 打赏
  • 举报
回复
顶一下
excited_lamb 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lxyppc 的回复:]
如果没有上下文,只能猜测

变量名全大写,猜测是常量定义,可以加const在前面(假设是C++语境)
根据变量字面意思,COMPZERO猜测是complement zero的意思,即~0,写成unsigned int COMPZERO = ~ZERO;更加好一些

实际情况中可以根据上下文得到确切意义
[/Quote]
为什么要这样,LZ的写法
int 如果16位会出问题?什么问题啊
君恪 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zmlovelx 的回复:]
unsigned int ZERO = 0;
unsigned int COMPZERO = ~0;
[/Quote]

顶一个
konta 2011-08-17
  • 打赏
  • 举报
回复
~0
帅得不敢出门 2011-08-17
  • 打赏
  • 举报
回复
unsigned int ZERO = 0;
unsigned int COMPZERO = ~0;
excited_lamb 2011-08-17
  • 打赏
  • 举报
回复
这题目想考这个吧:

long x = (signed short)0xffff;

assert(x == 0xffff);


加载更多回复(7)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧