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

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が両方ともunsigned intである場合、それらを追加してオーバーフローした場合、ラップアラウンドして先に進むには、可能な最大unsigned intよりも大きくする必要があるため、それらの値をどちらよりも大きくすることはできないためです。これらの値の。

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


  1. C / C ++文字列がintであるかどうかを確認するにはどうすればよいですか?

    文字列がintであるかどうかを確認する方法はいくつかあり、そのうちの1つは、isdigit()を使用して文字列を確認する方法です。 これは、文字列がC++言語でintであるかどうかを確認する例です。 例 #include<iostream> #include<string.h> using namespace std; int main() {    char str[] = "3257fg";    for (int i = 0; i < strlen(str); i++) {   &n

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

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