0,32的计算单位是( ),"2"在( )位上,腰围32in是表示32英寸( ).

6323人阅读
嵌入式面试题
1,之所以没输出5,这是C语言设计的原因。
2,之所以输出0,这是计算机体系结构的问题。
具体来说:
printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值(按照%d,%f等控制字符提示的格式)。
C语言设计中,int类型一般是32bit或者16bit,而float一般是64bit,并且有可能使用科学计数保存。这点就和huhugo88所
说一样,5在内存中为00101。而且5一般都在静态区,程序的静态存储区默认是0,那么当用%f来读时,就会读
64bit,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0
之所以Vc中不允许这种情况,而有些编译器就允许这么输出就是编译器设置的问题。按理说,这样访问内存是属于越界访问,
应该禁止。不过只是读,伤害性不大而已。
对于单精度浮点数(32bit),不少c语言编译系统以24位表示小数部分(包括1bit符号位),以8位表示指数部分。
==========================
printf(&%d/n&,5.01);  为什么输出一个大数?
在讲这个题目之前,预备知识,讲一下,printf函数,输入参数是读入缓冲区保存,再按照%?的格式从缓冲区中读出数据,并据此格式解释数据。
有了这个知识之后,在讲程序员面试宝典上看到一个题:
#include &stdio.h&
int main(int argc, char* argv[])  
{  
    printf(&%d/n&,5.01);  
return 0;  
}  
输出结果为: 
然后开始研究为什么会是这个数?
5.01是double类型,内存中占8个字节,保存在缓冲区。而%d为整型,占4个字节,printf从缓冲区中读入4字节,先读到低32位的数据。也就是说printf输出的应该是5.01以double类型保存数剧的低32位。为了检验此结果是否正确,对比5.01在内存中的表示与输出。
#include &stdio.h&
int main(int argc, char* argv[])  
{  
double d = 5.01;  
int *p = (int *)(&d);  
int rst = ;  
    printf(&1).%x/n&,*p);  
    printf(&2).%x/n&,*(p+1));  
    printf(&3).%x/n&,rst);  
return 0;  
}  
输出为:  
1).0x70a3d70a  
2).0x40140a3d  
3).0x70a3d70a 
这也就证明了%d输出了5.01的低32低。5.01的double类型,在内存的的表示为0xa3d70a。
事情看似也就完成了。
我又想,如果输入是浮点类型的5.01f,又会发生什么呢?
#include &stdio.h&
int main(int argc, char* argv[])  
{  
float f = 5.01f;    
int *p = (int *)(&f);       
    printf(&1).0x%x/n&,*p);    
    printf(&2).0x%x/n&,5.01f);    
return 0;    
}  
输出:  
1).0x40a051ec  
我们发现,此时输出的并不是浮点类型5.01f的内存的表示,这是为什么呢?
然后看到一个说法,是printf会把%f按double类型输出,也就是说会把参数float型的转成double型在输出。
但现在并不是%f,当然用%f显示的是正确的结果。于是我猜测,printf是将所在float型读入的数据都自动的转化为double型了,然后%f就按double处理,而我们这是%d,所以显示的为float转化为double型后的低4字节。
验证此想法:
#include &stdio.h&
int main(int argc, char* argv[])  
{  
double f = 5.01;    
int *p = (int *)(&f);  
    printf(&1).0x%x/n&,*p);  
    printf(&2).0x%x/n&,*(p+1));    
    printf(&3).0x%x/n&,5.01f);    
return 0;    
}  
输出:  
1).0x70a3d70a  
2).0x40140a3d  
但是我们发现结果并不一样,于是我又猜想,也是许printf将float转化为double的方式与默认的方式不一样
5.01d的默认的表示为:0xa3d70a,在上面已经说明了
#include &stdio.h&
int main(int argc, char* argv[])  
{  
    printf(&0x%8x/n0x%8x/n&,5.01f);  
return 0;  
}  
输出为:  
0x0; 
0x40140a3d 
与是发现printf将5.01f-&5.01d的表示是:0x00000
接着就是看这两个值是否都是为5.01了:
#include &stdio.h&
int main(int argc, char* argv[])  
{  
int d1[2], d2[2];  
    d1[0]=0x;  
    d1[1]=0x40140a3d;  
    d2[0]=0x70a3d70a;  
    d2[1]=0x40140a3d;  
double *p1 = (double *)d1;  
double *p2 = (double *)d2;  
    printf(&1).%f/n&,*p1);  
    printf(&2).%f/n&,*p2);  
return 0;    
}  
输出为:  
1).5.0; 
也就证明了0x00000,与0xa3d70a都是5.01d在机器中的表示。前者为5.01f(0x40a051ec)由printf转化为double后的表示,后者为5.01d的默认的表示。
总结:printf将输的浮点型参数全都自动转化为双精度型,且与默认的双精度的表示方法是不同的。最重要一点,printf不安全,类型不安全,要是类型不对了,也许我们就挂了^_^
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:191646次
积分:2780
积分:2780
排名:第10943名
原创:89篇
评论:19条
(1)(1)(1)(5)(1)(1)(2)(29)(15)(11)(11)(2)(2)(2)(1)(7)(4)公积金缴存率是怎么算的?有谁说说看?_公积金_土巴兔装修问答
公积金缴存率是怎么算的?有谁说说看?
报价结果查看方式:
微信人工报价
报价结果将发送到您的手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
公积金缴存率是怎么算的?有谁说说看?
提问者:萧萌阳|
时间: 22:31:25
已有5条答案
回答数:1|被采纳数:0
所有回答:&1
方法如下:  每月住房公积缴存额由职工本人缴纳和单位为职工缴纳二部分组成,其计算方法是以&本人上一年度月平均工资&为基数和政策规定的缴存比例得出。即:  (1)职工本人住房公积金的月缴存额=职工本人上一年度月平均工资×职工住房公积金缴存比例;  (2)单位为职工缴存的住房公积金的月缴存额=职工本人上一年度月平均工资×单位住房公积金缴存比例。  职工本人上一年度月平均工资同,同当地社会平均月平均工资之比,低于60%的最低按当地社会平均月平均工资的60%计算,高于300%,最高按300%计算。  缴存比例(各地可能有差异)浙江为5%-12%之间。不实行住房补贴制度的地区和用人单位,以增加住房公积金缴存比例方式实行住房分配货币化改革的,可适当提高缴存比例,但最高不超过20%。以上价格来源于网络,仅供参考,具体价格以购买时为准。
回答数:7|被采纳数:2
所有回答:&7
公积金缴存率计算方法住房公积金=缴存基数x缴存比例;住房公积金缴存基数为职工本人上一年度月平均工资(合同工按月聘用工资计算);住房公积金缴存比例,职工个人和单位各为8%-15%,具体由单位根据其经济承受能力在规定的缴存比例幅度内确定。
回答数:0|被采纳数:0
所有回答:&0
<p class="ask_one_p edit_、二套房公积金贷款额度调整内容为以家庭为单位购建第二套自住住房的,缴存职工申请住房公积金贷款的最高额度调低为:单个缴存职工最高不超过20万元;夫妻双方均为缴存职工且共同申请贷款的,最高不超过40万元。2、以家庭为单位购建首套自住住房的,缴存职工申请住房公积金贷款的最高额度不做调整,即:单个缴存职工最高不超过30万元;夫妻双方均为缴存职工且共同申请贷款的,最高不超过50万元。3、除了上述两点外,惠州住房公积金管理中心还调低未实现全员缴存单位的缴存职工申请住房公积金贷款的上限额度。具体是:(1)未实现全员缴存的单位,其缴存职工申请住房公积金贷款的上限额度为:该缴存职工根据套数可申请住房公积金贷款的最高额度乘以该单位住房公积金缴存覆盖率。单位住房公积金缴存覆盖率为,单位实际缴存住房公积金人数除以单位应缴存住房公积金人数。(2)已实现全员缴存但未实现足额缴存的单位,其缴存职工申请住房公积金贷款的上限额度不做调整,即:申请人个人或所在单位住房公积金缴存比例未达到法定最低缴存比例(5%)的,其贷款金额不超过申请人到法定退休年龄所缴纳住房公积金总额(配偶未申请共同借款的,可以合并计算)的2倍。(3)既未实现全员缴存又未实现足额缴存的单位,其缴存职工申请住房公积金贷款的上限额度为,申请人到法定退休年龄所缴纳住房公积金总额(配偶未申请共同借款的,可以合并计算)的2倍乘以该单位住房公积金缴存覆盖率。(4)夫妻共同申请贷款的,夫妻双方各自根据套数和缴存情况,按比例单独计算,再加总。希望能帮助到你
回答数:0|被采纳数:0
所有回答:&0
(一)职工个人当年度月交存住房公积金金额,等于该职工上年(1月至12月)月均工资总额乘以个人交存率。单位资助职工交存住房公积金金额,等于被资助职工上年(1月至12月)月均工资总额乘以单位交存率。工资总额的计算范围按国家统计局统制字1号文件的规定执行。  (二)个人交存率和单位交存率一致,2000年公积金交存率定为8%,三资企业交存率仍为10%。  (三)住房公积金月交存额每年核定一次,年度内不作变更。(7月至次年6月为一年度)
回答数:0|被采纳数:0
所有回答:&0
住房公积金缴存基数按职工上年度12月份工资总额算。工资总额应按国家统计局规定列入的项目计算。新录用和调入职工住房公积金缴存基数是职工本人当月工资总额。实行年薪制职工以职工年薪均分十二个月后为基数计算个人和单位的住房公积金月缴存额,2.缴存基数调整.住房公积金的缴存基数每年核定一次。每年1月,缴存单位携带加盖公章的上年度12月份工资报表到当地住房公积金管理机构进行基数调整。3.缴存基数上下限.住房公积金的月缴存基数最低不得低于烟台市政府公布的最低工资标准,最高不能高于上一年度烟台市统计局公布的职工月平均工资的3倍。缴存比例1.缴存比例政策规定。职工和单位住房公积金缴存比例不得低于工资总额的6%,有条件的单位可相应提高到8%,外商投资企业中方职工公积金的缴交率为10%,最低不得低于8%。月缴存额计算职工住房公积金月缴存额为职工本人住房公积金缴存基数乘以职工住房公积金缴存比例,并由所在单位每月从其工资中代扣代缴。单位为职工缴存的住房公积金月缴存额为职工本人住房公积金缴存基数乘以单位缴存比例.
已有 3 个回答
已有 3 个回答
已有 3 个回答
已有 3 个回答
已有 3 个回答
位业主已在问吧找到答案
简约现代风、清爽宜家风、典雅美式复古风总有一种适合你!
一万套装修案例
下载土巴兔APP
中国装修网int a[5]={1,2,3,4,5};printf(&%d\n&, *((int*)(&a+1)-2);
时间: 11:37:32
&&&& 阅读:53
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
有说服力的笔试题有一定的期限,问:什么是结果,答案是4,为什么要挤?
我明白(不知道是不正确):
&a这是一个数组指针,类型int[5],然后&a添加1其实a&#43;sizeof(int)*5,这是a[5]。转换为int该类型a&#43;5,的结果a[3]=4。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/yxwkf/p/4658209.html
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 32位怎么表示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信