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;