我之前没有在编程课中学到这一点,但现在我需要知道它。学习这些数字以及如何转换它们有什么好的资源?我几乎要像时间表一样记住这些。
答案 0 :(得分:16)
在我们的日常十进制系统中,基数或 radix 为10
。
数字系统的基数告诉我们正在使用多少个不同的数字。
在十进制系统中,我们使用数字0
到9
。
数字的重要性为radix ^ i
,其中i
是从右开始计数的数字位置,从零开始。
十进制号码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
这个方案将帮助我们用十进制数来理解任何数字系统。
十六进制系统的基数为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
我们刚刚将数字CDEFh
转换为十进制(即将基数16
转换为基数10
)。
在二进制系统中,基数为2
,因此仅使用数字0
和1
。
这是二进制数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
,数字0...7
正在使用中。
将八进制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
因此,在数字系统之间进行转换只需更改radix。
要了解按位运算符,请参阅http://www.eskimo.com/~scs/cclass/int/sx4ab.html。
答案 1 :(得分:2)
这:http://members.tripod.com/numeric_systems/似乎是一个好的开始 顺便说一下,到处都有关于它的信息,你只需要寻找它。
答案 2 :(得分:2)
使用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
数字系统的基本概念是:数字是每个数字的总和乘以其基数提升到数字位置的幂。
十六进制,十进制,八进制和二进制都是数字系统的“基础”,但它们的计数相同。你已经知道了十进制,所以最容易解释:
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
十六进制(十六进制):
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
十六进制实际上是唯一不直观明显的共同基础,因为它使用字母字符来描述值10,11,12,13,14和15,使用字母a,b,c,d,相反,e和f分别为。
我们使用二进制,八进制和十六进制,因为二进制是计算机的语言(记住,数字线可以具有当前或不具有当前(值1或0))。每个单个十六进制字符精确地描述四个二进制数字,而八进制字符描述3个二进制数字。十六进制比八进制使用得多。
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
十六进制数字的大写并不重要。对于您在数字系统方面记忆最重要的是上表。在将长十六进制或二进制数转换为十进制数时,通常应该使用Google,但如果你知道上面的表,那么很多短字符串都不需要谷歌。
作为练习,我还建议您使用您选择的语言编写转换方法,以便从一个基本系统转换为另一个基本系统。它们是简单的迭代器,有助于巩固您脑海中的概念。我喜欢这样写:decimal_ot_binary(binarynum)
而不是binary_to_decimal(binarynum)
。然后你可以理智地嵌套它们:int x = decimal_ot_hex(hex_ot_binary(binary_ot_decimal(40001)));
现在,只要您在0x?????
形式中看到十六进制数字,您就会知道它只是一个二进制数字字符串的表示。只需将十六进制中的每个字符转换为相应的二进制数字,如上所述。
答案 3 :(得分:1)
二进制,八进制和十六进制之间的转换非常简单。
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的幂。诀窍是在十进制和其他三个之间,因为10(十进制的基数)具有5的这个讨厌因子。
其他几个答案显示了如何将二进制,八进制和十六进制转换为十进制。我被教导从十进制到另一个基数的算法是连续除以基数并读取余数作为从右到左的答案。例如,以下是如何以十六进制表示227:
n n / 16 remainder
--- ------ ---------
227 14 3
14 0 14 (=E)
所以答案是E3。
答案 4 :(得分:1)
使用基数转换工具学习转换数字基数(也称为基数)更容易,为您完成所有艰苦的工作。
通过这种方式,您可以通过将一堆数字转换为不同基数来快速学习,并立即看到转换结果。
使用此基数转换器 - http://www.sooeet.com/math/base-converter.php
将十进制数列表转换为二进制,八进制和十六进制(一次一个数字)。
以下是两个十进制数列表,供您入门:
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
这两个列表看起来相似,但在将它们转换为二进制,八进制和十六进制时会产生非常不同的结果。试试吧,看看。
要使用此数字基本转换器,请键入一个数字,或将上述列表中的任何数字复制并粘贴到“Base-10”框中,然后按键盘上的Enter或Return键。您输入的数字将从base-2和base-36转换为二进制(base-2),八进制(base-8)和十六进制(base-16)以及许多其他数字基数(radixes)。
如果您想更好地理解基数转换,请阅读每个基数框旁边的帮助弹出窗口,以了解每个基数的内部工作原理。
现在,尝试通过替换二进制,八进制或十六进制“数字”来更改从转换上述列表中获得的二进制,八进制和十六进制数。
例如: 十进制15 =二进制1111
现在,在二进制结果(1111)中,用零(0)替换1个二进制数字(位)中的任何一个,然后按键盘上的Enter或Return键。
在这个例子中: 二进制1101 =十进制13
您可以看到二进制数右边的第二位的权重为2十进制。
继续进行这样的试验,包括十进制,二进制,八进制和十六进制数转换,您很快就会掌握这个主题。
答案 5 :(得分:1)
这里我的代码用Python进行数字转换(2,8,10,16)从任何到任何。它可能对你有所帮助。
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()
答案 6 :(得分:0)
也许玩这个内联片段可能会有所帮助......
这个小小的javascript片段可以通过各种方式进行转换:
您可以在其中一个输入字段中输入任何有效条目,它们会立即转换为其他字段。
在下面的每个字段中连续输入样本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);
&#13;
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%; }
&#13;
<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>
&#13;