for ループの開始変数を変更して、代わりに if ステートメントを使用しようとしています。ただし、それらは同等ではないようです..
次のようなループがあります。
int K = 0;
std::uint32_t CheckSum = 0;
const std::uint8_t* BuffPos = static_cast<const std::uint8_t*>(Data);
int Start = Height < 12 ? 1 : 12;
for (std::size_t I = Start; I < Height; ++I)
{
for (std::size_t J = 0; J < Width; ++J, ++K)
{
BuffPos += 3; //skip RGB and move to alpha pixel.
CheckSum += *(BuffPos++); //Checksum = count of alpha pixels.
}
}
std::cout<<CheckSum;
ただし、ループを で開始したくありませんI = Start
。if ステートメントでそれを行いたいと思います。私は次のことを試しました:
int K = 0;
std::uint32_t CheckSum = 0;
const std::uint8_t* BuffPos = static_cast<const std::uint8_t*>(Data);
int Start = Height < 12 ? 1 : 12;
for (std::size_t I = 0; I < Height; ++I)
{
for (std::size_t J = 0; J < Width; ++J, ++K)
{
BuffPos += 3; //Skip RGB and move to alpha pixel.
if (I >= Start) //The if statement.
CheckSum += *(BuffPos++); //Checksum = count of alpha pixels.
}
}
std::cout<<CheckSum;
ただし、if ステートメントを含む 2 番目のバージョンは、まったく同じビットマップの最初のバージョンとはまったく異なる数値を出力します。
これを行う理由はありますか?どうすれば修正できますか?なぜ違うのかわかりません:S