2進数
日本語 | 二進数 |
英語 | binary digit、binary number |
ふりがな | にしんすう |
フリガナ | ニシンスウ |
「2」が次の桁へと増える条件の、数値法。
一般的に使用されている「10進数」では、「10」が次の桁へと増える条件である。39に1を加えると、一番右端の桁は「10」となり、この時この桁は「0」に変わり、代わりに次の桁である「3」に1が加えられ「4」となり、結果40となる。
対して、2進数ではこの次の桁へと増える条件が「2」となる。01に1を加えると、一番右端の桁は「2」となり、この時この右端の桁は「0」に変わり、代わりに左隣の桁である「0」に1が加えられ「1」となり、結果10となる。
つまり2進数では各桁「0」と「1」のどちらかのみで表現されることになる。
現在のコンピューターのCPUやメモリは、「オフ」と「オン」の2種類の状態を持つスイッチのようなものを並べて構成されている。
たとえばint型の変数を宣言すれば、メモリ上にずらっと並ぶスイッチのうち32個を使って、整数値を表現する。
このスイッチひとつひとつを「ビット」と呼ぶ。
このビットの状態を表記する際に、「オフ」「オン」と書くのは面倒なため、通常は2進数で表記する。「0」を「オフ」、「1」を「オン」に割り当て、2進数の値でメモリの状態を表現するわけである。
2進数の値を整数リテラルとしてプログラム中に記述する方法はない。
2進数の値をプログラム中に記述したい場合は、IntegerクラスのparseInt()メソッドに、文字列として渡せばよい。その際、第2引数には2進数であることを示す「2」を渡す。
ただし、通常はこのような方法ではなく、16進数を用いて記述する。
16進数1桁は2進数4桁に該当するため、変換方法さえ憶えてしまえば2進数の代わりに16進数を使用できるし、16進数を使えば2進数の4分の1の文字数で済む。
詳しくは「16進数」の項目を参照。
一般的に使用されている「10進数」では、「10」が次の桁へと増える条件である。39に1を加えると、一番右端の桁は「10」となり、この時この桁は「0」に変わり、代わりに次の桁である「3」に1が加えられ「4」となり、結果40となる。
対して、2進数ではこの次の桁へと増える条件が「2」となる。01に1を加えると、一番右端の桁は「2」となり、この時この右端の桁は「0」に変わり、代わりに左隣の桁である「0」に1が加えられ「1」となり、結果10となる。
つまり2進数では各桁「0」と「1」のどちらかのみで表現されることになる。
現在のコンピューターのCPUやメモリは、「オフ」と「オン」の2種類の状態を持つスイッチのようなものを並べて構成されている。
たとえばint型の変数を宣言すれば、メモリ上にずらっと並ぶスイッチのうち32個を使って、整数値を表現する。
このスイッチひとつひとつを「ビット」と呼ぶ。
このビットの状態を表記する際に、「オフ」「オン」と書くのは面倒なため、通常は2進数で表記する。「0」を「オフ」、「1」を「オン」に割り当て、2進数の値でメモリの状態を表現するわけである。
2進数の値を整数リテラルとしてプログラム中に記述する方法はない。
2進数の値をプログラム中に記述したい場合は、IntegerクラスのparseInt()メソッドに、文字列として渡せばよい。その際、第2引数には2進数であることを示す「2」を渡す。
ただし、通常はこのような方法ではなく、16進数を用いて記述する。
16進数1桁は2進数4桁に該当するため、変換方法さえ憶えてしまえば2進数の代わりに16進数を使用できるし、16進数を使えば2進数の4分の1の文字数で済む。
詳しくは「16進数」の項目を参照。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// int型変数iを宣言して、その中に0を入れます。
int i = 0;
// 0が入っている時のビットの状態を、2進数で出力します。
System.out.println( i );
outputIntBit( i );
// 0
// 00000000000000000000000000000000
// 1増やして、1が入っている時のビットの状態を、
// 2進数で出力します。
++i;
System.out.println( i );
outputIntBit( i );
// 1
// 00000000000000000000000000000001
// さらに1増やして、2が入っている時のビットの状態を、
// 2進数で出力します。
++i;
System.out.println( i );
outputIntBit( i );
// 2
// 00000000000000000000000000000010
// このように、1増えることで一番右端の桁が1増えますが、
// 0→1→0と「2」には決してなりません。
// 「2」になるときに「0」になり、ひとつ上の桁が1増えます。
// 10進数では「10」が繰り上がりの数であると同様に、
// 2進数では「2」が繰り上がりの数なのです。
// 2進数を直接整数リテラルで書くことはできません。
// 文字列として記述し、IntegerクラスのparseInt()メソッドに
// 渡します。その際、第2引数に2を渡して、2進数だということを
// 示します。
i = Integer.parseInt( "00000000000000000000000000000011", 2 );
System.out.println( i );
outputIntBit( i );
// 3
// 00000000000000000000000000000011
}
/**
* int型変数の中身をビット形式で出力します。
*/
private static void outputIntBit( 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 );
System.out.println( strbuf.toString() );
}
}
public class Sample
{
public static void main( String[] args )
{
// int型変数iを宣言して、その中に0を入れます。
int i = 0;
// 0が入っている時のビットの状態を、2進数で出力します。
System.out.println( i );
outputIntBit( i );
// 0
// 00000000000000000000000000000000
// 1増やして、1が入っている時のビットの状態を、
// 2進数で出力します。
++i;
System.out.println( i );
outputIntBit( i );
// 1
// 00000000000000000000000000000001
// さらに1増やして、2が入っている時のビットの状態を、
// 2進数で出力します。
++i;
System.out.println( i );
outputIntBit( i );
// 2
// 00000000000000000000000000000010
// このように、1増えることで一番右端の桁が1増えますが、
// 0→1→0と「2」には決してなりません。
// 「2」になるときに「0」になり、ひとつ上の桁が1増えます。
// 10進数では「10」が繰り上がりの数であると同様に、
// 2進数では「2」が繰り上がりの数なのです。
// 2進数を直接整数リテラルで書くことはできません。
// 文字列として記述し、IntegerクラスのparseInt()メソッドに
// 渡します。その際、第2引数に2を渡して、2進数だということを
// 示します。
i = Integer.parseInt( "00000000000000000000000000000011", 2 );
System.out.println( i );
outputIntBit( i );
// 3
// 00000000000000000000000000000011
}
/**
* int型変数の中身をビット形式で出力します。
*/
private static void outputIntBit( 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 );
System.out.println( strbuf.toString() );
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // int型変数iを宣言して、その中に0を入れます。 int i = 0; // 0が入っている時のビットの状態を、2進数で出力します。 System.out.println( i ); outputIntBit( i ); // 0 // 00000000000000000000000000000000 // 1増やして、1が入っている時のビットの状態を、 // 2進数で出力します。 ++i; System.out.println( i ); outputIntBit( i ); // 1 // 00000000000000000000000000000001 // さらに1増やして、2が入っている時のビットの状態を、 // 2進数で出力します。 ++i; System.out.println( i ); outputIntBit( i ); // 2 // 00000000000000000000000000000010 // このように、1増えることで一番右端の桁が1増えますが、 // 0→1→0と「2」には決してなりません。 // 「2」になるときに「0」になり、ひとつ上の桁が1増えます。 // 10進数では「10」が繰り上がりの数であると同様に、 // 2進数では「2」が繰り上がりの数なのです。 // 2進数を直接整数リテラルで書くことはできません。 // 文字列として記述し、IntegerクラスのparseInt()メソッドに // 渡します。その際、第2引数に2を渡して、2進数だということを // 示します。 i = Integer.parseInt( "00000000000000000000000000000011", 2 ); System.out.println( i ); outputIntBit( i ); // 3 // 00000000000000000000000000000011 } /** * int型変数の中身をビット形式で出力します。 */ private static void outputIntBit( 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 ); System.out.println( strbuf.toString() ); } }