>>>演算子
日本語 | 論理右ビットシフト演算子 |
英語 | unsigned right shift operator |
ふりがな | ろんりみぎびっとしふとえんざんし |
フリガナ | ロンリミギビットシフトエンザンシ |
ビットを右にずらす演算子。
二項演算子のひとつ。ビットシフト演算子のひとつ、右ビットシフト演算子。「論理右シフト」を行う。
「整数型変数 >>> ビット数」という形式で、「ビット数」分だけビットを右にずらすことができる。
スペースが空く左端のビットには、0が埋められる。
ずらした値が戻り値として返るためそれを受け取る。「整数型変数」には影響しない。
使用できるのは整数型のみで、浮動小数点型やboolean型、参照型には使用することができない。Javaでは基本的にビット操作は推奨されず、ビットフラグ等に使用するための目的で整数型のみに許されているためである。
左端に、0ではなく「シフト前の値」をセットする場合には「>>演算子」を使用する。
ちなみに「<<<演算子」は存在しない。
これは、左ビットシフトに「算術」「論理」という違いがないためである。詳しくは「算術右シフト」の項目を参考。
二項演算子のひとつ。ビットシフト演算子のひとつ、右ビットシフト演算子。「論理右シフト」を行う。
「整数型変数 >>> ビット数」という形式で、「ビット数」分だけビットを右にずらすことができる。
スペースが空く左端のビットには、0が埋められる。
ずらした値が戻り値として返るためそれを受け取る。「整数型変数」には影響しない。
使用できるのは整数型のみで、浮動小数点型やboolean型、参照型には使用することができない。Javaでは基本的にビット操作は推奨されず、ビットフラグ等に使用するための目的で整数型のみに許されているためである。
左端に、0ではなく「シフト前の値」をセットする場合には「>>演算子」を使用する。
ちなみに「<<<演算子」は存在しない。
これは、左ビットシフトに「算術」「論理」という違いがないためである。詳しくは「算術右シフト」の項目を参考。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 9。
long l = 9;
System.out.println( l );
outputLongBit( l );
// 9
// 0000000000000000000000000000000000000000000000000000000000001001
// 右に2ビットシフトします。
l = l >>> 2;
outputLongBit( l );
// 0000000000000000000000000000000000000000000000000000000000000010
// -8
l = -8;
System.out.println( l );
outputLongBit( l );
// -8
// 1111111111111111111111111111111111111111111111111111111111111000
// 右に2ビットシフトします。
// 左端に0が入っていることを確認してください。
l = l >>> 2;
outputLongBit( l );
// 0011111111111111111111111111111111111111111111111111111111111110
// 使えるのは整数値型のみです。
// 浮動小数点型、boolean型、参照型には使用できません。
double d = 1.0;
// d = d >>> 2;
// コンパイルエラー:
// 演算子 >>> は引き数の型 double, int で未定義です。
}
/**
* long型変数をビット形式で出力します。
*/
private static void outputLongBit( long l )
{
// long型変数をビット形式で文字列化します。
String source = Long.toBinaryString( l );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
System.out.println( strbuf.toString() );
}
}
public class Sample
{
public static void main( String[] args )
{
// 9。
long l = 9;
System.out.println( l );
outputLongBit( l );
// 9
// 0000000000000000000000000000000000000000000000000000000000001001
// 右に2ビットシフトします。
l = l >>> 2;
outputLongBit( l );
// 0000000000000000000000000000000000000000000000000000000000000010
// -8
l = -8;
System.out.println( l );
outputLongBit( l );
// -8
// 1111111111111111111111111111111111111111111111111111111111111000
// 右に2ビットシフトします。
// 左端に0が入っていることを確認してください。
l = l >>> 2;
outputLongBit( l );
// 0011111111111111111111111111111111111111111111111111111111111110
// 使えるのは整数値型のみです。
// 浮動小数点型、boolean型、参照型には使用できません。
double d = 1.0;
// d = d >>> 2;
// コンパイルエラー:
// 演算子 >>> は引き数の型 double, int で未定義です。
}
/**
* long型変数をビット形式で出力します。
*/
private static void outputLongBit( long l )
{
// long型変数をビット形式で文字列化します。
String source = Long.toBinaryString( l );
// 左0埋めします。
StringBuffer strbuf = new StringBuffer();
for( int iF1 = source.length(); iF1 < 64; ++iF1 )
{
strbuf.append( "0" );
}
strbuf.append( source );
System.out.println( strbuf.toString() );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 9。 long l = 9; System.out.println( l ); outputLongBit( l ); // 9 // 0000000000000000000000000000000000000000000000000000000000001001 // 右に2ビットシフトします。 l = l >>> 2; outputLongBit( l ); // 0000000000000000000000000000000000000000000000000000000000000010 // -8 l = -8; System.out.println( l ); outputLongBit( l ); // -8 // 1111111111111111111111111111111111111111111111111111111111111000 // 右に2ビットシフトします。 // 左端に0が入っていることを確認してください。 l = l >>> 2; outputLongBit( l ); // 0011111111111111111111111111111111111111111111111111111111111110 // 使えるのは整数値型のみです。 // 浮動小数点型、boolean型、参照型には使用できません。 double d = 1.0; // d = d >>> 2; // コンパイルエラー: // 演算子 >>> は引き数の型 double, int で未定義です。 } /** * long型変数をビット形式で出力します。 */ private static void outputLongBit( long l ) { // long型変数をビット形式で文字列化します。 String source = Long.toBinaryString( l ); // 左0埋めします。 StringBuffer strbuf = new StringBuffer(); for( int iF1 = source.length(); iF1 < 64; ++iF1 ) { strbuf.append( "0" ); } strbuf.append( source ); System.out.println( strbuf.toString() ); } }