C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で整数のオーバーフローを検出する方法は?


唯一の安全な方法は、オーバーフローが発生する前にオーバーフローをチェックすることです。ただし、整数のオーバーフローをチェックするためのハッキーな方法がいくつかあります。したがって、unsigned int加算のオーバーフローを検出することを目的としている場合は、結果が実際にいずれかの付加価値よりも小さいかどうかを確認できます。たとえば、

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

これは、xとyが両方とも追加された場合に符号なし整数であり、それらがオーバーフローした場合、ラップアラウンドして先に進むことができるようにするには、可能な最大の符号なし整数よりも大きくする必要があるため、それらの値をどちらよりも大きくすることはできないためです。これらの値。

もう1つの方法は、CPUのオーバーフローフラグにアクセスしてみることです。一部のコンパイラは、テストできるアクセスを提供しますが、これは標準ではありません。

これを実現する方法は他にもありますが、それらは推定値のみを提供します。こちらで確認できます-https://stackoverflow.com/a/199455/3719089



  1. C ++を使用してOpenCVの静止画で顔を検出するにはどうすればよいですか?

    画像から顔を検出します。顔を検出するために、「detectMultiScale()」関数を使用しました。 この関数の実際の形式は-です。 構文 detectMultiScale(source matrix, vector, searchScaleFactor, minNeighbours, flags, minfeatureSize) 関数の引数を変更することで、「detect.MultiSpace()」関数を制御できます。この関数は次の引数を取ります。 ソースマトリックス 顔が検出されるマトリックスです。この場合、ビデオフレームを保持しているのはマトリックスになります。 ベクトル d

  2. C ++でOpenCVを使用して色を検出するにはどうすればよいですか?

    特定の色を検出し、色に基づいてオブジェクトを追跡する方法を理解します。色検出および色検出ベースの追跡システムのパフォーマンスは、環境に依存します。 部屋の明かりを変えたり、背景色を変えたりすると、色の検出に大きな影響があります。 次のプログラムは、C++でOpenCVを使用して色を検出する方法を示しています。 例 #include<iostream> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace std; using