5

私はmysqlデータベースで2進数、16進数、8進数のシステムを操作することに非常に興味があります。まず第一に、情報がたくさんあるので、なぜ情報を保存するときにそれらが必要なのか、またはその理由についてアドバイスをください。

また、マークされたシステムに保存する必要がある値のタイプはどれですか?

さらに、ここに「<<」のようなビット演算子があります

ここに例があります=>SELECT 50<<2 AS example;

これは私たちに結果200を与えます、誰でもそれがそれをどのように計算しているかを説明できますか?

回答ありがとうございます :))

4

2 に答える 2

5

まず、情報を保存するときになぜそれらが必要なのかアドバイスをください

コンピュータはデータをバイナリで保存します。格納されている実際のビットの観点から考えると便利な場合があります。その場合、使い慣れた10進法は少し厄介になる可能性があります(変換は簡単ではないため)。ビットを完全に書き出すこともできますが、非常に小さい数値でも書き込むために多くのスペースを占めるため、これは面倒なことがよくあります(たとえば、10進数24521は2進数です101111111001001)。

代わりに、2の累乗の基数を使用する傾向があります。これは、各「桁」が2進表現の正確なビット数を表すという特性を持ちながら、2進よりもコンパクトだからです。たとえば、16進数(基数16)は、4ビット(「ニブル」)を表し、数字0からF(10進数15/ 2進数1111)までを表します。8進数(基数8)の数字は、3ビットを表し、数字0から7(binary 111)までです。

以前の10進数の例は245215FC916進数または577118進数です。右から順に、上記の2進数表現で各桁がそれぞれ4ビットと3ビットを表していることがわかります。したがって、他のベースでこれらのコンパクトな表現を見ながら、人間がバイナリ表現を視覚化することは(比較的)簡単です。

また、マークされたシステムに保存する必要がある値のタイプはどれですか?

これが何を意味するのかわかりません。上に示したように、これらすべてのシステムで同じ値を表すことができます。MySQLでは、2進リテラルを前に付けることで示し0b、16進リテラルを前に付けることで示すことができます0x。MySQLは8進リテラルをサポートしていません。

誰でもそれがどのように計算されているかを説明できますか?

<<演算子はビット単位の左シフトを実行します。つまり、左側のオペランドのビットを、右側のオペランドで指定された桁数だけ左にシフトします。

位置ごとに、整数のビットが左にシフトされ、それらのビットによって表される値は2倍に増加します。これは、10進法で数字を左にシフトする効果に似ています。これにより、値が10倍に増加します(たとえば、50を左に1桁シフトすると、500になります。これは10倍になります。2進数110(10進6)では1をシフトします。左の場所は1100(10進数の12)を与え、これは2倍の増加です)。

あなたの場合、数値50(つまり110010)のビットを左に2桁シフトすると、2倍の増加(つまり、全体で4倍の増加)が得られます。これ11001000は10進数の200です。

于 2012-05-16T20:28:26.800 に答える
2

最初の2つの質問は曖昧すぎて答えられませんが、3番目の質問は私が答えるのに十分具体的です。

ここ<<2に記載されているように、はビットを左に2桁シフトしています。これは、50に2^2を掛けるのと同じです。

mysql> SELECT 50<<2 AS example;
+---------+
| example |
+---------+
|     200 |
+---------+
1 row in set (0.00 sec)

mysql> 
mysql> SELECT 50 * POW(2,2) AS example;
+---------+
| example |
+---------+
|     200 |
+---------+
1 row in set (0.00 sec)
于 2012-05-16T20:18:44.117 に答える