【问题标题】:Binary Arithmetic Operation二进制算术运算
【发布时间】:2014-06-25 16:00:23
【问题描述】:

为什么 float 和 int 都是 4bytes 的编译时错误? 我在各个网站上搜索过,但没有得到满意的答案

public static void main(String[] args) {
        int a= 10.0F+10;
        System.out.println(a);

}

如果我以陈旧的方式提出问题,请纠正我,因为我是 stackOverflow 的新手

【问题讨论】:

  • 仅仅因为两个值的位长度相同并不意味着它们是赋值兼容的。映射位会给你无意义的答案。
  • @user3580294:Righto,否则你也可以将long 转换为Object;确实很有趣。

标签: java casting compiler-errors type-conversion


【解决方案1】:

在转换类型时,Java 不考虑使用的内存大小。例如,您可以将 64 位 long 隐式转换为 32 位 float,因为 float 的范围更广。

您不能从 float 隐式转换为 int,因为这被认为是缩小范围并需要显式转换。

注意:转换的顺序很重要

int a = (int) 10.0f + 123456787;
System.out.println("a = "+a);
int b = (int) (10.0f + 123456787);
System.out.println("b = "+b);

打印

a = 123456797 // expected
b = 123456792

您会得到不同的结果,因为 123456787 不能表示为没有表示错误的浮点数。但是,10.0F 可以准确地表示为 int。

同样,在这里按顺序投射效果最好。

int a = (int) 1.5f * 100;
System.out.println("a = "+a);
int b = (int) (1.5f * 100);
System.out.println("b = "+b);

打印

a = 100
b = 150 // expected

【讨论】:

    【解决方案2】:

    总和将导致float,您必须将其转换为int,因为它不可隐式转换

    int a= (int) 10.0F + 10;
    

    在您的示例中,您在此处添加10.0,您不需要float

    【讨论】:

    • 注意:对于不同的“10”值,这可能与int a = (int) (10.0F + 10); 不同。 ;)
    • 看我的回答有两个例子,一个顺序更好。
    猜你喜欢
    • 2013-02-27
    • 2019-03-25
    • 2014-09-04
    • 2011-01-25
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多