c语言字节宽度,C语言数据类型转换

f4de332161767f1adbd63d674ba6ab56.png

2006-01-25

VisualC++6.0中,教材上说+ - * /运算的两个数中,只要有一个是float型,都将转变为double型,并且运算结果为double型。但是我把一个整型数据和一个浮点型数据相加,然后用sizeof测算结果的数据长度,却为4个字节,我们知道在VisualC++6.0中double型占8个字节,显然得到的结果不是double型的。是否是教材上有错呢?高人指点

教材没错。

你用sizeof运算是得不到正确结果的。因为编译器不会真的去查找内存,然后告诉你数据长度,而是根据一些预设规则直接给出答案。比如:

float aa=1。0;

int bb=1;

sizeof(aa+bb);

编译后,对于sizeof(aa+bb)这个语句,编译器直接返回两个操作数中较大类型的数据长度,而不是像你认为的那样先计算aa+bb,然后保存结果,最后返回结果的数据长度。

那么怎样能知道aa+bb默认情况下返回什么类型呢?这个问题不是非常容易的,需要一点汇编方面的知识,我就不具体讲了,只提一点,如果你以后掌握了汇编原理,可以自己实验一下:

float aa=1。 0...全部

教材没错。

你用sizeof运算是得不到正确结果的。因为编译器不会真的去查找内存,然后告诉你数据长度,而是根据一些预设规则直接给出答案。比如:

float aa=1。0;

int bb=1;

sizeof(aa+bb);

编译后,对于sizeof(aa+bb)这个语句,编译器直接返回两个操作数中较大类型的数据长度,而不是像你认为的那样先计算aa+bb,然后保存结果,最后返回结果的数据长度。

那么怎样能知道aa+bb默认情况下返回什么类型呢?这个问题不是非常容易的,需要一点汇编方面的知识,我就不具体讲了,只提一点,如果你以后掌握了汇编原理,可以自己实验一下:

float aa=1。

0;

int bb =1;

printf("%2。1f",bb+aa);

这段代码编译并反汇编后,可以看到弹出一个qword,而不是dword,因此证明默认情况下编译器按照double型处理。

。收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值