C++ 警告错误问题

C++ 警告错误问题,c++,C++,节目: void DibLaplacian8Direct(CDib sourceImg) { register int i,j; int w = sourceImg.GetWidth(); int h = sourceImg.GetHeight(); CDib cpyImage = sourceImg; BYTE** pSourceImg = sourceImg.GetPtr(); BYTE** pCpyImage = cpyImage.Ge

节目

void DibLaplacian8Direct(CDib sourceImg)
{   
    register int i,j;
    int w = sourceImg.GetWidth();
    int h = sourceImg.GetHeight();
    CDib cpyImage = sourceImg;
    BYTE** pSourceImg = sourceImg.GetPtr();
    BYTE** pCpyImage = cpyImage.GetPtr();
    float G;
    for(j =1;j<h-1;j++)
    {
        for(i =1;i<w-1;i++)
        {
            G = -1*pCpyImage[j-1][i-1] + -1*pCpyImage[j-1][i] + (-1)*pCpyImage[j-1][i+1]+
                (-1)*pCpyImage[j][i-1] + 8*pCpyImage[j][i]    + (-1)*pCpyImage[j][i+1]+
                -1*pCpyImage[j+1][i-1]  + (-1)*pCpyImage[j+1][i] + -1*pCpyImage[j+1][i+1];
            pSourceImg[j][i] = (BYTE)G;
        }
    }
}
void DibLaplacian8Direct(CDib sourceImg)
{   
寄存器int i,j;
int w=sourceImg.GetWidth();
int h=sourceImg.GetHeight();
CDib cpyImage=sourceImg;
字节**pSourceImg=sourceImg.GetPtr();
字节**pCpyImage=cpyImage.GetPtr();
浮球G;

对于(j=1;j而言,第一个警告是由于
float
只有六个有效数字,而
int
可以有更多有效数字。如果有,则会失去准确性

通常,如果不丢失数据,则无法将整数转换为浮点值。此外,如果不丢失错误的位置,则无法将浮点值转换回整数值,因此再次收到警告

上述情况的简单简约代码示例:

#include<iostream>
using namespace std;

int main()
{
    int a=10;
    int b=3;

    float c;
    c=a/b;

    cout << c << endl;
    return 0;
}
检查第二个警告

要消除第二个警告,需要将文件保存为Unicode格式


转到“文件->高级保存选项”,然后在该选项下选择要将其保存为的新编码。UTF-8或UNICODE代码页1200是您需要的设置。

重要的是要了解编译器在警告20时告诉您的内容。问题是浮点数只有23位精度,而整数有31位精度。如果如果mbers大于2^23,则在浮点中存储将丢失低位

现在你的数字永远不会超过2^23,所以你很好。不过,知道这里发生了什么是很重要的。这一警告是有原因的,只是在不了解发生了什么的情况下加入演员阵容,总有一天会把你搞得一团糟

在您的特定情况下,我一点也不清楚为什么要使用浮点。您要添加九个整数,其中任何一个都不能大于2^11。整数的精度非常高。使用浮点只会降低程序的速度(可能会有相当大的降低)


最后,对字节的最后一次转换是令人担忧的。如果您的值超出范围,会发生什么情况?可能不是您想要的。例如,如果字节无符号,并且您的浮点值最终为-3.0,那么您将存储253。

@Miss:更新了答案。如果您不确定准确性,请不要使用类型转换。您比我们更好是的,我用了flaot.你能给我一些参考资料吗,从哪里我可以研究这些int和flaot的准确性。。etc@Miss:我按您所说的做了,并将其删除,但我还有一个类似的错误。@als:error:Warning 1 Warning C4819:文件包含一个无法在当前代码页中表示的字符 (1257)。将文件保存为Unicode格式以防止数据丢失d:\2nd\imagetool\dib.h 1 1 imagetool自从您编辑后,一些答案与所述问题无关。这使此页面很难理解。请不要这样做。如果您有新问题,请将其作为新问题发布。hmm@johnsyweb..hmm好的,谢谢..我会关心的..@johnsyweb:我更正了这个问题。。
G = (float) (.....)