int_size_is_32(),判断int是否为32位

     题目来自深入理解计算机系统习题2.67,题目描述:编写一个函数int_size_is_32(),当在一个int为32位的机器上运行时,返回1,而其他情况返回0,不允许用sizeof操作符。

     首先进行的尝试:

int Is_Int_32() 
{
	int set_msb = 1 << 31;
	int beyond_msb = 1 << 32;
	return set_msb && !beyond_msb; 
}
   一般情况下运行良好,但是在SUN PARC这样的32位机器上运行时,过程返回为0.编译器提示如下:


 问:

A.这个代码在哪个方面没有遵守C语言标准

B 修改代码,使它在int至少为32位的任何机器上都能正确的运行

C 修改代码,使它在int至少为16位的任何机器上都能正确的运行


对于A,移位数量可能会大于等于字长,在这里,个人推测是SUN的那32位机器里,int是16位表示,所以会有警告超出

对于B,不用修改即可

对于C,可以修改如下:

int  Is_Int_32_2() 
{
	int i=1;
	int digit_count=1;
	while ((i=i<<16)>0)
		digit_count++;
	return digit_count==2 ? 1:0;
}
不用移位计算可以计算判断int是否32位也可以利用指针的特性,指向int的指针每次加1,增加的空间则为一个int的大小,示范代码如下:

int  Is_Int_32_1() 
{
	int i=1;
	return (int)(&i+1)-(int)(&i)==4 ? 1:0;
}
    如果要判断操作系统是否32位呢?则可以利用指针的另一个特点了:指针大小一般等于机器字长,采用二级指针,每次加1,则为一个指针的大小,示范代码如下:

int Is_OS_32()
{
	char *p="ab";
	char **q = &p;
	return (char)(q+1)-(char)(q)==4 ? 1:0;
}

     深入理解计算机系统还真是本好书,慢慢来吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值