请教CSAPP中的一个题目

piaozi2003 2004-10-26 10:26:54
CSAPP第二章2.45

编写一个过程int_size_is_32(),当在一个int是32位机器上运行,返回1,期其余情况返回0

下面是一个错误的尝试
int bad_int_size_is_32()
{
int set_msb=1<<31;
int beyond_msb=1<<32; //warn:

return set_msb && !beyond_msb;
}

Note: set_msb is nozero when word size is >=32 and beyond_msb is zero when word size<=32
在SUN SPARC这样的32位机器上编译运行结果返回0
其中编译器Warn: left shift count >= width of type

问: 1. 代码在哪个方面没有遵守C的标准
2. 正确的写法
...全文
125 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaozi2003 2004-10-26
  • 打赏
  • 举报
回复
意思是 1左移31位后的值赋给set_msb //如果int为>=32位, 则set_msb应当是一个非0值
1左移32位后的值赋给beyond_msb //如果int为<=32位,则beyond_msb是一个0值

然后用逻辑运算set_msb && !beyond_msb来综合判断计算机上的int字长

但为什么在SUN SPARC机器上回是0呢?
piaozi2003 2004-10-26
  • 打赏
  • 举报
回复
自己再给自己顶一下。
dudu妈 2004-10-26
  • 打赏
  • 举报
回复
int set_msb=1<<31;
int beyond_msb=1<<32;
这个是什么意思,是c吗,偶不懂
dudu妈 2004-10-26
  • 打赏
  • 举报
回复
先占个位置,帮你顶一下!!!!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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