首页 > 编程知识 正文

java long double,java表示负数

时间:2023-05-04 04:12:18 阅读:50708 作者:2103

c :

在0x7FFFFFFF * 2.0这一步中,首先将0x7FFFFFFF提升为双精度类型,计算结果也为双精度类型。 此外,如果转换为int,小数部分将被截断,但整数部分的值将大于int取值的范围。 这样转换会产生什么样的c标准没有规定。 但是,大多数编译器仍然按位保留。 如果是,则结果为0xFFFFFFFE。

另一方面,int是有符号整数,最高有效位(符号位)为1表示其为负数,因此为-2。 从结果来看是这样的。

此外,编译器很可能会优化乘法,将0x7FFFFFFF乘以2将向左移动1位,达到0xFFFFFFFE,因此结果保持为-2。

Java :

与算术运算时一样进行类型转换。 首先,0x7FFFFFFF * 2.0的结果也是双精度型。 这个浮点型的整数部分还是超出了int的范围。 这些浮点数将在转换为int时转换为int可以表示的最大值,即0x7FFFFFFF,因此结果为2147483647。

正如您在这里看到的,c和Java处理浮点值到整数的转换,这一点不同。 虽然c基本上按位截断,但Java在浮点转换为整数时尽量满足原始数字的含义。 (浮点值超过了int范围,所以让int取最大值。 )

顺便说一下,在Java中,如果将0x7FFFFFFF * 2.0的结果转换为长整型,则可以获得与c相同的结果。 由于Java整数间变换规则与c相同,因此如果从低位进行截断,也同样有可能引起编码变化的问题。 这样,long就可以保留其浮点型的数值,因此迁移到int后的行为与c相同,结果为-2。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。