JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 桁溢れとは

桁溢れ

日本語 桁溢れ、桁あふれ
英語 overflow
ふりがな けたあふれ
フリガナ ケタアフレ

解説

に格納できる範囲を越えた値になること。
整数及び実数に対する四則演算うことで、格納する変数の最大値を越えた値になった場合、その値は不正となる。これを「桁溢れ」または「オーバーフロー」と言う。
 
整数実数の四則演算は、JavaではなくCPUがう。
この演算は「ビットでの処理」をうため、の範囲を考慮せず無理矢理ビット的な四則演算ってしまう。そのため、その結果がの範囲を越えていた場合、異常な値となってしまう。
例外が投げられたりしないため、桁溢れの発生後に「桁溢れしたかどうか」を確認するのは難しい。桁溢れを防ぐためには、十分大きなBigDecimalクラスを使用する、もしくは四則演算う前に値をチェックすることが必要となる。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // int型での桁溢れ。
        // 最大値を格納します。
        int i = Integer.MAX_VALUE;
        System.out.println( i );
        System.out.println( getIntBit( i ) );
        // 2147483647
        // 01111111111111111111111111111111

        // これに1を足すと桁溢れします。
        ++i;
        System.out.println( i );
        System.out.println( getIntBit( i ) );
        // -2147483648
        // 10000000000000000000000000000000

        // このように、ビット的には1増えてますが、
        // このビットは正の範囲ではなく負の範囲なので
        // 変な値になっています。
    }

    /**
    *   int型変数をビット形式で返します。
    */
    private static String getIntBit( int i )
    {
        // int型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( i );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        forint iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );

        return strbuf.toString();
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // int型での桁溢れ。
        // 最大値を格納します。
        int i = Integer.MAX_VALUE;
        System.out.println( i );
        System.out.println( getIntBit( i ) );
        // 2147483647
        // 01111111111111111111111111111111

        // これに1を足すと桁溢れします。
        ++i;
        System.out.println( i );
        System.out.println( getIntBit( i ) );
        // -2147483648
        // 10000000000000000000000000000000

        // このように、ビット的には1増えてますが、
        // このビットは正の範囲ではなく負の範囲なので
        // 変な値になっています。
    }

    /**
    *   int型変数をビット形式で返します。
    */
    private static String getIntBit( int i )
    {
        // int型変数をビット形式で文字列化します。
        String source = Integer.toBinaryString( i );
        // 左0埋めします。
        StringBuffer strbuf = new StringBuffer();
        for( int iF1 = source.length(); iF1 < 32; ++iF1 )
        {
            strbuf.append( "0" );
        }
        strbuf.append( source );

        return strbuf.toString();
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/06/20
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。