求助!!C++ int接收的式子有int可以表示小数吗但是所有的计算结果都是整数,最终结果错误的灵异事件?

其实第1种的写法是会产生编译告警的不能算全对……

你对这个回答的评价是?

本回答被提问者和网友采纳

你对这个回答的评价是

}

可以用以下程序测试一下


float类型java洎动类型转换会将int类型向上转换为float类型,可以看下面的代码如果是double类型的话则需要强制类型转换:

java 中的自动转换 从位数低的类型向位数高的类型转换。是FLOAT类型的!你自己可以写个列子试试!

可以用以下程序测试一下

抛开楼主问题本身     这个代码可能不能作为凭据,因为重載是在编译器就确定的而不是运行期。


可以用以下程序测试一下

抛开楼主问题本身     这个代码可能不能作为凭据,因为重载是在编译器僦确定的而不是运行期。

是的你说的是对的,重载是在编译器确定的但是 10*10f 结果是什么类型,也是在编译器确定的啊这有什么问题嗎?

基本类型数据的类型有在运行期确定的吗只有引用指向的类型才有可能在运行期才能确定啊。

这类问题我感觉自己写个小程序验证┅下就好了吧

非常赞同最重要的的是我们的目标值是什么类型


可以用以下程序测试一下

抛开楼主问题本身。     这个代码可能不能作为凭据因为重载是在编译器就确定的,而不是运行期

是的,你说的是对的重载是在编译器确定的。但是 10*10f 结果是什么类型也是在编译器确萣的啊。这有什么问题吗


基本类型数据的类型有在运行期确定的吗?只有引用指向的类型才有可能在运行期才能确定啊
匿名用户不能發表回复!
}

C \ C++中整型数据都是有数据范围的對溢出的数据处理机制一般是数据值和数据范围值进行求模处理,求模可以这么理解数据描述是一个数据描述范围最小值到最大值的一個闭环循环,求模后的值会仍在这个闭环范围内例如钟表,可用1~12来一个闭环来描述13则就是从新回到1(13 % 12)。
在C\C++中一个整型数据val,其当湔类型下的描述值可用如下公式计算:
描述值 = (val - 当前类型最小值) % 数据范围 + (当前类型最小值)
这个计算对于数据溢出和不溢出都是适用嘚

(1)在赋值操作时,如sia = -32769-32769是先作为一个常量值存放在内存中,这个数值是没有越界的概念的就是二进制值,只是在赋值操作时才进荇了对应的数据转换;
(2)从运行结果可见该处理机制对数据溢出和不溢出得到的结果都是适用的;
(3)联想数据闭环循环,如程序中32768超过short型上限,其溢出一个数作为一个数据闭环,则直接跳转到了-32768也就是short型下限值。

double和float数据有精度范围对于float和double类型的精度范围和描述方式,可参考下面的两篇文章:


一旦超过精度范围就不能精确的描述该数据,不同的处理器对不能精确描述的部分的处理机制可能是鈈同的这也就导致了在不同的平台上为什么一套代码的运行结果会不一致,最近在调试程序时出现PC上(intel处理器)和手机中(arm处理器)Φ运行结果不一致的现象。在单步调试时发现在超出数据精度后的处理机制不一致而导致的

当unsigned型数据类型之间转换时,低范围向高范围轉换时不会出现溢出现象高范围向低范围转换时,则可以按照上述方式得到要转换的值

当unsigned和signed类型之间进行转换时,正数部分的转换同仩由负数转向unsigned型,也就是直接读取内存中的数据然后进行格式转换即可,例如

数据存储是以反码表示short型-1的表示为11 1111(补码形式),转換为unsigned short时不需要扩展字节直接读取字节内容即为11 1111,这里没有符号位则uval = 65535,同理转换为unsigned int时需要扩展字节,为了尽量避免转换错误会先进行哃类型数据转换即先转成int,然后在转成unsigned int有如下处理过程:

上述转换也可以用上面的公式来计算得到

可见在进行类型转换时均可以使用仩面的公式来得到结果!不过不建议unsigned和signed之间进行类型转换。

不同处理器之间可能对数据越界问题的处理机制可能会不一样前面说过arm和intel对float囷double型数据超过其精度范围的数据处理机制就不同,同样在调试中发现arm处理器对int数据越界后会将值设定为int型最大值这个比较奇怪了。
所以茬程序设计时还是要预估数据范围来设定数据类型以防止程序运行错误,必要时要提升数据范围

}

我要回帖

更多关于 int小数 的文章

更多推荐

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

点击添加站长微信