【发布时间】:2014-08-02 03:53:49
【问题描述】:
我已将数组 gx、数组 arr 定义为短类型。但是为什么左边的操作可能以 int 类型结束,而我必须将其转换为 short 呢?编译器错误可能是从 int 到 short 的有损转换。
这是我的代码。
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.
}
是因为所谓的拆箱吗?所以这意味着我每次做手术都需要施法?
【问题讨论】:
-
int大于short。可能会发生位丢失。 -
编译器可能注意到您将
short值相乘并将结果存储到short中。乘法的结果有可能大于short。这与装箱/拆箱无关。例如,这指的是从int到Integer的隐式转换。 -
试着把你的 2 换成短裤。 (短)2*arr...
-
谢谢!很多东西需要学习