C语言中强制转换的问题

问大家一下:#include<stdio.h>voidmain(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i... 问大家一下:
#include<stdio.h>
void main()
{
float x;
int i;
x=3.6;
i=(int)x;
printf("x=%f,i=%d\n",x,i);
}

结果为:

x=3.600000,i=3 (为什么i=3,而不是4 啊?3.6的四舍五入后,不是4吗?)
Press any key to continue
展开
 我来答
幻影忍者冲啊BG
2017-09-10 · TA获得超过175个赞
知道答主
回答量:332
采纳率:0%
帮助的人:47.8万
展开全部
你好!一步一步来inta,b;这句的功能是操作系统为变量a,b分别分配一块空闲的存储空间以后使用a,b将相当于访问各自所对应的存储空间a=0000;b=Ox1234;这句的功能是把0000放到变量a所对应的存储空间把0x1234放到变量b所对应的存储空间重点是下面这句a=(char)(b)它的功能相当于修改变量a的值,具体是这样操作的,从b所对应的存储空间中取出b的值即0x1234,然后把他转换成char类型,再然后将转换后的结果放到变量a所对应的存储空间,即覆盖掉原来的0000这个转换后的结果又是多少呢,是这样算的通常在C中int类型占4个字节而char类型占1个字节如果把一个int类型的数据以char类型输出,那么,编译器会自动丢弃int类型的前3个字节的内容对应本题int类型的数据b是0X1234为十六进制在计算机中是这样存储的00000000000000000001001000110100共4个字节转换成char类型后,前3个字节丢弃即结果是00110100共1个字节对应的十进制是52当语句a=(char)(b)执行完后这1个字节的值也就是52就放到了变量a所对应的存储空间,而不是原来的0000了所以,整个过程并没有改变变量a和b的数据类型原来是int类型现在还是int型,程序只是修改了变量a的值,连b的值都没有修改,因为修改a的值时只是从b所对应的存储空间里把b的值取出来用一用,用的结果是修改成char类型,但他把修改后的结果放到a所对应的存储空间了,并没有放到b所对应的存储空间,所以原来b所对应的值没有被覆盖,原来是0X1234,现在还是0X1234仅供参考!呵呵
巧57
2013-04-18 · TA获得超过437个赞
知道答主
回答量:685
采纳率:0%
帮助的人:161万
展开全部
float x;你是定义的单精度型,int i;定义的是整型。
i=(int)x;是将X强制转换成整型。整型整型,就是要整数部分,小数部分就会舍去掉。
printf("x=%f,i=%d\n",x,i);输出时,x是以百分号F输出,那么就不是以整型输出。在整数后面就会跟六位小数部分,没有值的位数会以0补上。就像此题的输出,X=3.60000后面就是用0补出。
由于 i 的值是x的值强制转换的整型数据,后面就不会有0占位的情况。就直接输出3,后面小数就去掉了。
若想要一个单精度数据保留小数位数的话在输出时候可以这样书写:printf("x=%n.mf");其中的n和m,即输出总共占n位其中有m位小数 如a=1.23456 用%4.2f输出为1.23如果用%5,1f输出为123.4即长度为5小数为1!这里也有当原数字长度小于n时左端补空格这个规则!还有就是当n前面有个负号时即%-nf或%-n.mf时就右端补空格!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
推荐于2017-09-10 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6372万
展开全部
强制转换是“取整”,不进行“四舍五入”,也就是取不大于被强制的数据的最大(绝对值)整数!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
r1renhw
2013-04-19 · TA获得超过1577个赞
知道小有建树答主
回答量:810
采纳率:100%
帮助的人:414万
展开全部
你好!
一步一步来

int a,b;
这句的功能是操作系统为
变量a,b分别分配一块空闲的存储空间
以后使用a,b将相当于访问各自所对应的
存储空间

a = 0000;b = Ox1234;
这句的功能是
把0000放到变量a所对应的存储空间
把0x1234放到变量b所对应的存储空间

重点是下面这句a = (char)(b)
它的功能相当于修改变量a的值,
具体是这样操作的,从b所对应的存储空间中取出
b的值即0x1234,然后把他转换成char类型,再然后将
转换后的结果放到变量a所对应的存储空间,即覆盖掉
原来的0000

这个转换后的结果又是多少呢,是这样算的
通常在C中int类型占4个字节 而char类型占1个字节
如果把一个int类型的数据以char类型输出,那么,编译器
会自动丢弃int类型的前3个字节的内容

对应本题
int类型的数据b是0X1234 为十六进制
在计算机中是这样存储的
0000 0000 0000 0000 0001 0010 0011 0100共4个字节
转换成char类型后,前3个字节丢弃
即结果是0011 0100 共1个字节 对应的十进制是52

当语句a = (char)(b)执行完后
这1个字节的值也就是52就放到了变量a所对应的存储空间,
而不是原来的0000了

所以,整个过程并没有改变变量a和b的数据类型
原来是int类型现在还是int型,程序只是修改了变量a
的值,连b的值都没有修改,因为修改a的值时只是从b所
对应的存储空间里把b的值取出来用一用,用的结果是修改成
char类型,但他把修改后的结果放到a所对应的存储空间了,
并没有放到b所对应的存储空间,所以原来b所对应的值没有被
覆盖,原来是0X1234,现在还是0X1234

仅供参考!呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白猫happy
2013-04-18 · 超过14用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:45万
展开全部
强制将浮点数转化为整型类型,并不是四舍五入的,而是直接取整!想实现四舍五入,需要自己写函数的,大致思路就是整数和小数部分分开,然后通过判断小数部分返回四舍五入值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式