博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
int_size_is_32(),判断int是否为32位
阅读量:2440 次
发布时间:2019-05-10

本文共 857 字,大约阅读时间需要 2 分钟。

     题目来自深入理解计算机系统习题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;}
     深入理解计算机系统还真是本好书,慢慢来吧

转载地址:http://smcqb.baihongyu.com/

你可能感兴趣的文章
一个比较vista的vista主题for rf5.0fb(转)
查看>>
推荐一款 Linux 上比较漂亮的字体(转)
查看>>
在Linux中添加新的系统调用(转)
查看>>
Fedora Core 5.0 安装教程{下载}(转)
查看>>
把ACCESS的数据导入到Mysql中(转)
查看>>
shell里边子函数与主函数的实例(转)
查看>>
Linux中MAXIMA符号运算软件的简介(转)
查看>>
银行选择Linux 则无法回避高成本(转)
查看>>
上网聊天需要防范的几大威胁(转)
查看>>
[分享]后门清除完全篇(转)
查看>>
用php在linux下连接mssql2000(转)
查看>>
让你的Linux支持WEB修改密码(转)
查看>>
MYSQL的master/slave数据同步配置(转)
查看>>
一个完整的ftp远程批量shell(转)
查看>>
Vsftpd匿名无法上传,配置如下,帮忙找下原因,谢谢~!(转)
查看>>
crontab命令简介(转)
查看>>
C++中的静态联编和动态联编介绍(转)
查看>>
带有农历的日历(QT版本1752-2100)(转)
查看>>
LINUX的系统内核空间的保护(转)
查看>>
在Visual C++中利用UDL文件建ADO连接(转)
查看>>