プログラミングの授業でこれを学んだことはありませんが、今は知る必要があります。これらの数値を学習するための優れたリソースと、それらを変換する方法は何ですか? 私は九九のようにこれらを暗記するつもりです。
7 に答える
私たちの毎日の 10 進法では、基数または基数は10
です。数体系の基数は、使用されている異なる桁数を示します。10 進法では、 から までの数字を使用0
します9
。
数字の意味は ですradix ^ i
。ここで、i
は右から数えた数字の位置で、ゼロから始まります。
10 進数の6789
内訳:
6 7 8 9 radix ^ i
| | | | --------------
| | | +-- ones 10 ^ 0 = 1
| | +----- tens 10 ^ 1 = 10
| +-------- hundreds 10 ^ 2 = 100
+----------- thousands 10 ^ 3 = 1000
ones tens hundreds thousands
-----------------------------------------------
(9 * 1) + (8 * 10) + (7 * 100) + (6 * 1000)
= 9 + 80 + 700 + 6000
= 6789
このスキームは、10 進数の観点からあらゆる数体系を理解するのに役立ちます。
16 進数の基数はであるため、を表すために16
追加の数字を使用する必要があります。同様の方法で16 進数を分解してみましょう。A...F
10...15
CDEFh
C D E F radix ^ i
| | | | --------------
| | | +-- ones 16 ^ 0 = 1
| | +----- sixteens 16 ^ 1 = 16
| +-------- 256:s 16 ^ 2 = 256
+----------- 4096:s 16 ^ 3 = 4096
ones sixteens 256:s 4096:s
-----------------------------------------------
(Fh * 1) + (Eh * 16) + (Dh * 256) + (Ch * 4096)
= (15 * 1) + (14 * 16) + (13 * 256) + (12 * 4096)
= 15 + 224 + 3328 + 49152
= 52719
数値を 10 進数に変換しました(つまり、 baseを base にCDEFh
切り替えました)。16
10
2進法では基数が2
であるため、数字0
とのみ1
が使用されます。2 進数から 10進数への変換は次の1010b
とおりです。
1 0 1 0 radix ^ i
| | | | --------------
| | | +-- ones 2 ^ 0 = 1
| | +----- twos 2 ^ 1 = 2
| +-------- fours 2 ^ 2 = 4
+----------- eights 2 ^ 3 = 8
ones twos fours eights
-----------------------------------------------
(0 * 1) + (1 * 2) + (0 * 4) + (1 * 8)
= 0 + 2 + 0 + 8
= 10
8 進法 - 同じこと、基数は8
、数字0...7
は使用中です。8 進数から 10 進数への変換04567
:
4 5 6 7 radix ^ i
| | | | --------------
| | | +-- ones 8 ^ 0 = 1
| | +----- eights 8 ^ 1 = 8
| +-------- 64:s 8 ^ 2 = 64
+----------- 512:s 8 ^ 3 = 512
ones eights 64:s 512:s
-----------------------------------------------
(7 * 1) + (6 * 8) + (5 * 64) + (4 * 512)
= 7 + 48 + 320 + 2048
= 2423
したがって、数値システム間の変換を行うには、基数を変更するだけです。
ビット演算子については、http://www.eskimo.com/~scs/cclass/int/sx4ab.html を参照してください。
Google を使用:
http://www.google.com/search?q=0b11110000+to+hex
http://www.google.com/search?q=0b11110000+to+decimal
http://www.google.com/search?q=0b11110000+to+octal
http://www.google.com/search?q=4232+to+binary
http://www.google.com/search?q=4232+to+hex
http://www.google.com/search?q=4232+to+octal
http://www.google.com/search?q=0xaf0e23+to+decimal
http://www.google.com/search?q=0xaf0e23+to+binary
http://www.google.com/search?q=0xaf0e23+to+octal
数体系の基本的な概念は次のとおりです。数は、その基数に数の位置を乗じた各桁の合計です。
16 進数、10 進数、8 進数、および 2 進数はすべて数体系の「基数」ですが、同じものを数えます。あなたはすでに小数を知っているので、説明するのが最も簡単です:
4232 = 4 * 10^3 + 2 * 10^2 + 3 * 10^1 + 2 * 10^0
3210 <- the base that you raise each of the above digits to
この正確な原則は、すべての基本システムに適用されます。
バイナリ:
0b11110000 = 1 * 2^7 + 1 * 2^6 + 1 * 2^5 + 1 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0
76543210 <- the base that you raise each of the above digits to
16 進数 (hex):
0xaf0e23 = 10 * 16^5 + 15 * 16^4 + 0 * 16^3 + 14 * 16^2 + 2 * 16^1 + 3 * 16^0
543210 <- the base that you raise each of the above digits to
16 進数は、アルファベット文字を使用して値 10、11、12、13、14、および 15 を記述し、文字 a、b、c、d、e、およびf それぞれ代わりに。
2 進数はコンピューターの言語であるため、2 進数、8 進数、16 進数を使用します (デジタル ワイヤには電流が流れる場合と流れない場合 (値 1 または 0) があることを思い出してください)。各 16 進文字は正確に 4 桁の 2 進数を表し、8 進文字は 3 桁の 2 進数を表します。16 進数は 8 進数よりもはるかに頻繁に使用されます。
0b0000 = 0x0 = 0
0b0001 = 0x1 = 1
0b0010 = 0x2 = 2
0b0011 = 0x3 = 3
0b0100 = 0x4 = 4
0b0101 = 0x5 = 5
0b0110 = 0x6 = 6
0b0111 = 0x7 = 7(this is as far as octal goes)
0b1000 = 0x8 = 8
0b1001 = 0x9 = 9
0b1010 = 0xa = 10
0b1011 = 0xb = 11
0b1100 = 0xc = 12
0b1101 = 0xd = 13
0b1110 = 0xe = 14
0b1111 = 0xf = 15
16 進数の大文字化は重要ではありません。数体系に関して覚えておくべき最も重要なことは、上の表です。通常、長い 16 進数または 2 進数を 10 進数に変換する場合は Google を使用する必要がありますが、上記の表を知っていれば、多くの短い文字列に Google は必要ありません。
演習として、選択した言語で変換メソッドを記述して、ある基本システムから別の基本システムに変換することもお勧めします。これらは単純な反復子であり、頭の中で概念を固めるのに役立ちます。私はこのように書くのが大好きです:decimal_ot_binary(binarynum)
の代わりにbinary_to_decimal(binarynum)
. 次に、それらを賢明にネストできます。int x = decimal_ot_hex(hex_ot_binary(binary_ot_decimal(40001)));
さて、フォームに 16 進数が表示されるときはいつでも0x?????
、それが単に 2 進数の文字列の表現であることがわかります。上記のように、16 進数の各文字を対応する 2 進数に変換するだけです。
これ: http://members.tripod.com/numeric_systems/は良いスタートのようです。
ちなみに、それに関する情報はどこにでもあります。探すだけです。
ここでは、任意から任意への数値変換 (2,8,10,16) のための Python のコードを示します。それはあなたを助けるかもしれません。
class Conversion:
def __init__(self):
pass
def dec_to_any(self, data, base):
return base(data)
def any_to_dec(self, data, base):
return int(data, base)
def main():
menu ={1: 'dec to bin', 2:'dec to oct', 3:'dec to hex', 4: 'bin to dec', 5: 'bin to oct', 6:'bin to hex',
7: 'oct to bin', 8: 'oct to dec', 9: 'oct to hex', 10: 'hex to bin', 11: 'hex to oct', 12: 'hex to dec'}
target_base = {'bin': bin,'oct': oct, 'hex': hex}
src_base = {'bin': 2,'oct': 8, 'hex': 16}
choice=int(input(str(menu)+"\nEnter your choice: "))
src, target = menu[choice].split()[0], menu[choice].split()[2]
c=Conversion()
val =input("Enter the value :")
if(src == "dec"):
val =int(val)
value= c.dec_to_any(val, target_base[target])
print('Value is :', value)
elif(target == "dec"):
value = c.any_to_dec(val, src_base[src])
print('Value is :', value)
else:
val = c.any_to_dec(val, src_base[src])
value= c.dec_to_any(val, target_base[target])
print('Value is :', value)
if __name__ == '__main__':
main()
2 進数、8 進数、16 進数の変換は非常に簡単です。
binary <=> octal: three binary digits <=> one octal digit
binary <=> hex: four binary digits <=> one hex digit
octal <=> hex: four octal digits <=> three hex digits
(by way of binary, if necessary)
2 進数、8 進数、16 進数の基数はすべて 2 の累乗であるため、これらは簡単です。10 (10 進数の基数) には 5 という厄介な係数があるため、10 進数と他の 3 つの基数の間を行き来するのがコツです。
他のいくつかの回答は、2進数、8進数、および16進数から10進数に変換する方法を示しています。10 進数から別の基数に移動するように教えられたアルゴリズムは、基数で継続的に除算し、右から左に進む答えとして剰余を読み取ることです。たとえば、227 を 16 進数で表す方法は次のとおりです。
n n / 16 remainder
--- ------ ---------
227 14 3
14 0 14 (=E)
したがって、答えは E3 です。
基数 (基数とも呼ばれます) の変換を学習することは、すべての面倒な作業を行う基数変換ツールを使用すると、はるかに簡単になります。
そうすれば、一連の数値を異なる基数に変換したり、基数から変換したりすることですばやく学習でき、変換の結果をすぐに確認できます。
この基数コンバータを使用してください - http://www.sooet.com/math/base-converter.php
10 進数のリストを 2 進数、8 進数、および 16 進数 (一度に 1 つの数値) に変換します。
ここでは、開始するための 10 進数の 2 つのリストを示します。
1、2、4、8、16、32、64、128、256、512、1024、2048、4096、8192、16384、32768、65536
0、1、3、7、15、31、63、127、255、511、1023、2047、4095、8191、16383、32767、65535
2 つのリストは似ていますが、2 進数、8 進数、および 16 進数に変換すると、結果が大きく異なります。試してみてください。
この基数コンバーターを使用するには、数値を入力するか、上記のリストから任意の数値をコピーして [Base-10] ボックスに貼り付け、キーボードの Enter キーまたは Return キーを押します。入力した数値は、基数 2 と基数 36 から、2 進数 (基数 2)、8 進数 (基数 8)、16 進数 (基数 16)、およびその他の多くの基数 (基数) に変換されます。
基数変換をよりよく理解したい場合は、各基数ボックスの横にあるヘルプ ポップアップを読んで、各基数の内部動作について学習してください。
ここで、上記のリストを変換して得た 2 進数、8 進数、および 16 進数を、2 進数、8 進数、または 16 進数の「数字」に置き換えて変更してみてください。
例: 10 進数の 15 = 2 進数の 1111
ここで、2 進数の結果 (1111) で、1 の 2 進数 (ビット) のいずれかをゼロ (0) に置き換え、キーボードの Enter または Return を押します。
この例では: バイナリ 1101 = 10 進数 13
2 進数の右から 2 番目のビットには、10 進数で 2 の重みがあることがわかります。
このように、10 進数、2 進数、8 進数、16 進数の変換を試し続けると、すぐに主題を習得できます。
10 進数、16 進数、8 進数、2 進数、および複数基数のコンバーター
たぶん、このインラインスニペットで遊ぶと役立つかもしれません...
この小さな JavaScript スニペットは、あらゆる方法で変換できます。
入力フィールドの 1 つに任意の有効なエントリを入力すると、それらは即座に他のフィールドに変換されます。
以下の各フィールドにサンプル10
またはを続けて入力します (または整数フィールドに入力してみてください ;) ...100
1767707668033969
function doChange(ent) {
var val=ent.target.value;
if (ent.target.id == 'hex') val=parseInt(val, 16);
else if (ent.target.id == 'oct') val=parseInt(val, 8);
else if (ent.target.id == 'bin') val=parseInt(val, 2);
else if (ent.target.id == 'sel') val=parseInt(val,
document.getElementById('radix').value);
document.getElementById('int').value=(val*1).toString(10);
document.getElementById('hex').value=(val*1).toString(16).toUpperCase();
document.getElementById('oct').value=(val*1).toString( 8);
document.getElementById('bin').value=(val*1).toString( 2);
document.getElementById('sel').value=(val*1).toString(
document.getElementById('radix').value).toUpperCase();
}
function selRadix(ent) {
var radix=ent.target.value;
document.getElementById('sel').value=
(1*document.getElementById('int').value).
toString(radix).toUpperCase();
}
function wStart() {
var ent=document.getElementsByTagName('input');
for (var i=0;i<ent.length;i++) {
ent[i].addEventListener('keyup',doChange);
ent[i].addEventListener('change',doChange);
};
ent=document.getElementById('radix');
for (i=2;i<36;i++) ent.innerHTML+="<option>"+i+"</option>";
ent.innerHTML+='<option selected="true">36</option>';
ent.addEventListener('change',selRadix);
}
setTimeout(wStart,300);
body { font-family: sans; font-size: .8em; margin: 0pt; padding:1% }
input#int { width: 12%; }
input#hex { width: 10%; }
input#oct { width: 18%; }
input#bin, input#sel { width: 32%; }
<div>
Int<input id="int"></input>
Hex<input id="hex"></input>
Oct<input id="oct"></input>
Bin<input id="bin"></input>
<hr />
Radix: <select id="radix"></select>
<input id="sel"></input>
</div>