long
日本語 | 長 |
英語 | long int |
ふりがな | ろんぐ |
フリガナ | ロング |
プリミティブ型のひとつ。
文字を格納するための型。
ラッパークラスはLongクラス。
long型で宣言された変数は、64ビット(8バイト)分のメモリ領域を使用する。
左端のビットは正負のフラグとなり、0がプラス、1がマイナスを表す。
残りの63ビットと合わせて、-9223372036854775808~9223372036854775807までの整数値を格納することができる(マイナスの場合は2の補数を使用する)。
int型の倍のサイズのため、int型変数に入りきらない値を格納するのに使用される。
たとえば「エポックからののべミリ秒」はint型変数に入りきらないため、SystemクラスのcurrentTimeMillis()メソッドは戻り値の型がlong型である。
ただ、金額等の大きな整数を扱う場合にはBigDecimalクラスを使用することが多い。
long型変数に整数リテラルの値を格納する場合は、整数リテラルの末尾に「L」を付ける必要があるので注意。整数リテラルはそのままだとint型とみなされるためである。
文字を格納するための型。
ラッパークラスはLongクラス。
long型で宣言された変数は、64ビット(8バイト)分のメモリ領域を使用する。
左端のビットは正負のフラグとなり、0がプラス、1がマイナスを表す。
残りの63ビットと合わせて、-9223372036854775808~9223372036854775807までの整数値を格納することができる(マイナスの場合は2の補数を使用する)。
int型の倍のサイズのため、int型変数に入りきらない値を格納するのに使用される。
たとえば「エポックからののべミリ秒」はint型変数に入りきらないため、SystemクラスのcurrentTimeMillis()メソッドは戻り値の型がlong型である。
ただ、金額等の大きな整数を扱う場合にはBigDecimalクラスを使用することが多い。
long型変数に整数リテラルの値を格納する場合は、整数リテラルの末尾に「L」を付ける必要があるので注意。整数リテラルはそのままだとint型とみなされるためである。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// long型の変数を宣言します。
long l;
// メモリ上に64ビットの領域が確保されました。
// ここに整数値1000000000000000000Lを格納します。
// 整数リテラルをlong型にする際は末尾に「L」を付けます。
l = 1000000000000000000L;
// それを出力します。
System.out.println( l );
// 1000000000000000000
// long型変数に格納された「1000000000000000000」が
// どのようにビットとして格納されているか見てみます。
outputLongBit( l );
// 0000110111100000101101101011001110100111011001000000000000000000
// このように、「1000000000000000000」というlong型整数は、
// 「0000110111100000101101101011001110100111011001000000000000000000」
// という「0か1」を64個並べた形で格納されています。
// 最大値と最小値はLongクラスのstaticフィールド
// として宣言されているのでそれを使いましょう。
l = Long.MAX_VALUE;
System.out.println( l );
outputLongBit( l );
// 9223372036854775807
// 0111111111111111111111111111111111111111111111111111111111111111
l = Long.MIN_VALUE;
System.out.println( l );
outputLongBit( l );
// -9223372036854775808
// 1000000000000000000000000000000000000000000000000000000000000000
// 整数リテラルはそのままだとint型になります。
// なのでint型を超えたサイズの整数リテラルを書くと
// コンパイルエラーになります。
// ※コンパイルエラーの例
// long l2 = 2147483648;
// ※エラーメッセージ
// 型 int のリテラル 2147483648 は範囲外です
// ※コンパイルエラーの例ここまで
// 末尾に「L」を付ければlong型とみなされます。
long l2 = 2147483648L;
System.out.println( l2 );
// 2147483648
}
/**
* long型変数の中身をビット形式で出力します。
*/
private static void outputLongBit( long ch )
{
long flag = 1;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 64; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
if( ( ch & flag ) == 0 )
{
strbuf.insert( 0, "0" );
}
else
{
strbuf.insert( 0, "1" );
}
// 2倍することでビットシフトします。
flag *= 2;
}
System.out.println( strbuf );
}
}
public class Sample
{
public static void main( String[] args )
{
// long型の変数を宣言します。
long l;
// メモリ上に64ビットの領域が確保されました。
// ここに整数値1000000000000000000Lを格納します。
// 整数リテラルをlong型にする際は末尾に「L」を付けます。
l = 1000000000000000000L;
// それを出力します。
System.out.println( l );
// 1000000000000000000
// long型変数に格納された「1000000000000000000」が
// どのようにビットとして格納されているか見てみます。
outputLongBit( l );
// 0000110111100000101101101011001110100111011001000000000000000000
// このように、「1000000000000000000」というlong型整数は、
// 「0000110111100000101101101011001110100111011001000000000000000000」
// という「0か1」を64個並べた形で格納されています。
// 最大値と最小値はLongクラスのstaticフィールド
// として宣言されているのでそれを使いましょう。
l = Long.MAX_VALUE;
System.out.println( l );
outputLongBit( l );
// 9223372036854775807
// 0111111111111111111111111111111111111111111111111111111111111111
l = Long.MIN_VALUE;
System.out.println( l );
outputLongBit( l );
// -9223372036854775808
// 1000000000000000000000000000000000000000000000000000000000000000
// 整数リテラルはそのままだとint型になります。
// なのでint型を超えたサイズの整数リテラルを書くと
// コンパイルエラーになります。
// ※コンパイルエラーの例
// long l2 = 2147483648;
// ※エラーメッセージ
// 型 int のリテラル 2147483648 は範囲外です
// ※コンパイルエラーの例ここまで
// 末尾に「L」を付ければlong型とみなされます。
long l2 = 2147483648L;
System.out.println( l2 );
// 2147483648
}
/**
* long型変数の中身をビット形式で出力します。
*/
private static void outputLongBit( long ch )
{
long flag = 1;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 64; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
if( ( ch & flag ) == 0 )
{
strbuf.insert( 0, "0" );
}
else
{
strbuf.insert( 0, "1" );
}
// 2倍することでビットシフトします。
flag *= 2;
}
System.out.println( strbuf );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // long型の変数を宣言します。 long l; // メモリ上に64ビットの領域が確保されました。 // ここに整数値1000000000000000000Lを格納します。 // 整数リテラルをlong型にする際は末尾に「L」を付けます。 l = 1000000000000000000L; // それを出力します。 System.out.println( l ); // 1000000000000000000 // long型変数に格納された「1000000000000000000」が // どのようにビットとして格納されているか見てみます。 outputLongBit( l ); // 0000110111100000101101101011001110100111011001000000000000000000 // このように、「1000000000000000000」というlong型整数は、 // 「0000110111100000101101101011001110100111011001000000000000000000」 // という「0か1」を64個並べた形で格納されています。 // 最大値と最小値はLongクラスのstaticフィールド // として宣言されているのでそれを使いましょう。 l = Long.MAX_VALUE; System.out.println( l ); outputLongBit( l ); // 9223372036854775807 // 0111111111111111111111111111111111111111111111111111111111111111 l = Long.MIN_VALUE; System.out.println( l ); outputLongBit( l ); // -9223372036854775808 // 1000000000000000000000000000000000000000000000000000000000000000 // 整数リテラルはそのままだとint型になります。 // なのでint型を超えたサイズの整数リテラルを書くと // コンパイルエラーになります。 // ※コンパイルエラーの例 // long l2 = 2147483648; // ※エラーメッセージ // 型 int のリテラル 2147483648 は範囲外です // ※コンパイルエラーの例ここまで // 末尾に「L」を付ければlong型とみなされます。 long l2 = 2147483648L; System.out.println( l2 ); // 2147483648 } /** * long型変数の中身をビット形式で出力します。 */ private static void outputLongBit( long ch ) { long flag = 1; StringBuffer strbuf = new StringBuffer(); // 全ビットを右からチェックします。 for( int iF1 = 0; iF1 < 64; ++iF1 ) { // 取得した順に出力すると逆順になるので、 // 取得した値を頭に挿入していきます。 if( ( ch & flag ) == 0 ) { strbuf.insert( 0, "0" ); } else { strbuf.insert( 0, "1" ); } // 2倍することでビットシフトします。 flag *= 2; } System.out.println( strbuf ); } }