当前位置: 首页 > 知识库问答 >
问题:

从int到short[重复]的可能有损转换

方茂
2023-03-14
public PixImage sobelEdges() {

short gy=0;
for(int x=1;x<width-1;x++){
    for(int y=1;y<height-1;y++){
       // if(x=){
            for(int z=0;z<3;z++){
            gx[x][y][z]=arr[x-1][y-1][z]-arr[x+1][y-1][z]+2*arr[x-1][y][z]-2*arr[x+1][y][z]+arr[x-1][y+1][z]-arr[x+1][y+1][z];

            }
       // }    
    }     
}   
return this;
// Don't forget to use the method mag2gray() above to convert energies to
// pixel intensities.

共有1个答案

何涵畅
2023-03-14

这不是开箱;是“二进制数字提升”。JLS第5.6.2节规定:

当运算符对一对操作数应用二进制数字提升时,每一个操作数都必须表示一个可转换为数字类型的值,以下规则按顺序适用:

>

  • 如果任何操作数是引用类型,则进行解装箱转换(§5.1.8)。

    否则,两个操作数都转换为int类型。

    对某些运算符的操作数执行二进制数字提升:

    在某些情况下,条件运算符?:(§15.25)

    (强调我的)

    当这些值相加/相乘时,在完成数学运算之前,它们将被提升为int。最后,在赋回数组之前,可以强制转换回short

    gx[x][y][z] = (short) (arr[x-1][y-1][z]-arr[x+1][y-1][z]+2*arr[x-1][y][z]
        -2*arr[x+1][y][z]+arr[x-1][y+1][z]-arr[x+1][y+1][z]);
    

  •  类似资料:
    • 问题内容: 我已经定义了数组gx,数组arr为短型。但是为什么左边的运算可能会以int类型结束,而我必须将其转换为short?编译器错误可能是从int到short的有损转换。 这是我的代码。 } 那是因为所谓的拆箱吗?因此,这意味着我每次进行手术时都需要进行投射吗? 问题答案: 它不是开箱;这是“二进制数值提升”。 JLS的第5.6.2节规定: 当运算符将二进制数字提升应用于一对操作数时,每个操作

    • 我希望输入一个和另一个ex: 1和1000000000,现在我希望创建一个大小为1000000000的数组。然后在数组的每个索引处,存储int val,ex:。 当我尝试执行此操作时,Netbeans 会向我显示此行中的错误: “可能从long到int的有损转换”。这是我的密码:-

    • 我试图在Textpad中复制这个Java程序,但我收到以下错误 C:\Users\User\Desktop\java\Drawing.java:14: 错误: 不兼容的类型: 从 float 到 int g.drawLine ((getWidth()/2) , 0, (getWidth()*i) , (getHeight()/2)); 这是代码 在getWidth*i之前我已经尝试过添加(floa

    • 我有一个“从int到byte的可能有损转换”错误的问题,但我没有在代码中将整数转换为byte。 这是笔记本课 我不知道为什么我会得到这个错误。有人能帮助我吗?谢谢你。

    • 我有这个程序,它几乎是一个计算器,但有一个移动的JLabel,每次你点击标签时都应该改变颜色,但我在代码的最底部有3个错误,我已经用注释标记了。所有三个都是:错误:不兼容类型:可能从长整型转换为整数