20135329李海空 20135327郭皓 第二章家庭作业 2.67

2.67 给你一个任务,编写一个过程int_size_is_32(),当在一个int是32位的机器上运行时,该程序产生1,而其他情况则产生0.不允许使用sizeof运算符。下面是开始时的尝试:

/*The following code does not run properly on some machies*/
int bad_int_size_is_32(){
  int set_msb = 1<<31;
  int beyond_msb = 1<<32;
  return set_msb &&! beyond_msb;
}

当在SUN SPARC这样的32位机器上编译并运行时,这个过程返回的却是0.下main的编译器信息给了我们一个问题的指示。
warning:left shift count >= width of type

 

A:左移位数大于等于int长度,32位机器中最多左移31位,16位机器中最多左移15位。

 

B:用两次左移来实现<<32:

int set_msb=1<<31;

int beyond_msb=set_msb<<1;

 

C:用三次左移来实现<<31与<<32:

int temp=1<<15;

temp<<=15;

int set_msb=temp<<1;

int beyond_msb=temp<<2;

转载于:https://www.cnblogs.com/haikong/p/4895213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值