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;

posted @ 2015-10-20 16:28  20135329李海空  阅读(206)  评论(0编辑  收藏  举报