>>演算子
日本語 | 算術右ビットシフト演算子 |
英語 | signed right shift operator |
ふりがな | さんじゅつみぎびっとしふとえんざんし |
フリガナ | サンジュツミギビットシフトエンザンシ |
ビットを右にずらす演算子。
二項演算子のひとつ。ビットシフト演算子のひとつ、右ビットシフト演算子。「算術右シフト」を行う演算子。
「整数値型変数 >> ビット数」という形式で、「ビット数」分だけビットを右にずらすことができる。ずらした値が戻り値として返るためそれを受け取る。「整数値型変数」には影響しない。
スペースが空く左端のビットには、ずらす前に左端のビットにある値が埋められる。0ではないので注意。
左端のビットに常に0を挿入したい場合には>>>演算子を使用する。
恐らく「ビットをずらす」という場合には左端に0を挿入した方がいいと思われるため、「>>演算子」より「>>>演算子」を使用することが多いだろう。
使用できるのは整数値型のみで、浮動小数点型やboolean型、参照型には使用することができない。
Javaでは基本的にビット操作は推奨されず、ビットフラグ等に使用するための目的で整数値型のみに許されているためである。
二項演算子のひとつ。ビットシフト演算子のひとつ、右ビットシフト演算子。「算術右シフト」を行う演算子。
「整数値型変数 >> ビット数」という形式で、「ビット数」分だけビットを右にずらすことができる。ずらした値が戻り値として返るためそれを受け取る。「整数値型変数」には影響しない。
スペースが空く左端のビットには、ずらす前に左端のビットにある値が埋められる。0ではないので注意。
左端のビットに常に0を挿入したい場合には>>>演算子を使用する。
恐らく「ビットをずらす」という場合には左端に0を挿入した方がいいと思われるため、「>>演算子」より「>>>演算子」を使用することが多いだろう。
使用できるのは整数値型のみで、浮動小数点型やboolean型、参照型には使用することができない。
Javaでは基本的にビット操作は推奨されず、ビットフラグ等に使用するための目的で整数値型のみに許されているためである。
参考サイト
- (参考サイトはありません)
// 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;
System.out.println( l );
outputLongBit( l );
// 2
// 0000000000000000000000000000000000000000000000000000000000000010
// -8
l = -8;
System.out.println( l );
outputLongBit( l );
// -8
// 1111111111111111111111111111111111111111111111111111111111111000
// 右に2ビットシフトします。
// 左端に1が入っていることを確認してください。
l = l >> 2;
System.out.println( l );
outputLongBit( l );
// -2
// 1111111111111111111111111111111111111111111111111111111111111110
// 使えるのは整数値型のみです。
// 浮動小数点型、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;
System.out.println( l );
outputLongBit( l );
// 2
// 0000000000000000000000000000000000000000000000000000000000000010
// -8
l = -8;
System.out.println( l );
outputLongBit( l );
// -8
// 1111111111111111111111111111111111111111111111111111111111111000
// 右に2ビットシフトします。
// 左端に1が入っていることを確認してください。
l = l >> 2;
System.out.println( l );
outputLongBit( l );
// -2
// 1111111111111111111111111111111111111111111111111111111111111110
// 使えるのは整数値型のみです。
// 浮動小数点型、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; System.out.println( l ); outputLongBit( l ); // 2 // 0000000000000000000000000000000000000000000000000000000000000010 // -8 l = -8; System.out.println( l ); outputLongBit( l ); // -8 // 1111111111111111111111111111111111111111111111111111111111111000 // 右に2ビットシフトします。 // 左端に1が入っていることを確認してください。 l = l >> 2; System.out.println( l ); outputLongBit( l ); // -2 // 1111111111111111111111111111111111111111111111111111111111111110 // 使えるのは整数値型のみです。 // 浮動小数点型、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() ); } }