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 );
}
}




