associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Binary

Bases numéricas. Qual estudante de ciência da computação(ou mesmo qualquer outra coisa em informática) nunca achou uma estupidez converter decimal para binário, ou não amaldiçoa a humanidade por usar decimal ao invés de hexadecimal como padrão?

Huh? não saca nada de binário? É uma base numérica simples. Por exemplo, quando você vai contar alguma coisa, você pensa em "1, 2, 3, 4, 5...". Isso é decimal, uma base numérica com 10 algarismos(0, 1, 2, 3, 4, 5, 6, 7, 8 e 9). Se você tem 9 + 1 coisas para contar, você "começa novamente" do 1, adicionando um 0 à direita dele, para obter um 10. Depois disse se chega na casa dos 80's, 10000000's and blah blah blah.

Bináriamente falando, isso não é diferente. você tem 0, 1, 10, 11, 100... porque você não pode usar mais que dois algarismos. Assim:

0 = 0

1 = 1

2 = 10

3 = 11 ... Viu como não é difícil? O único problema é que isso é entediante, principalmente se você tem que converter números nas casas dos trilhões.[veja mais em http://en.wikipedia.org/wiki/Binary_numeral_system ]

Pensando nisso, e inspirado por alguns exercícios do livro Thinking in C++, de Bruce Eckel, eu me inspirei para criar uma função que converte decimal para binário.

   1 def dectobin(n, call=1):
   2         '''It takes "n" as a decimal and converts it
   3            to binary, printing in the stdout.'''
   4         if n < 2**call:
   5                 for acc in xrange(call-1, -1, -1):
   6                         if (n & (1 << acc)):
   7                                 print '1',
   8                         else:
   9                                 print '0',
  10         else:
  11                 return dectobin(n, call+1)

Como podemos notar, a função chama a si mesma recursivamente se o número de dígitos(i.e.: o parâmetro call) não for suficiente para representar o número em binário.

Detalhe para o uso de BitwiseOperators, na expressão "if (n & (1 << acc))". A expressão "x << y" retorna "x" com os dígitos em binário deslocados "y" casas à esquerda. A expressão "x & y" realiza um "Bitwise AND"(também conhecido como Conjunção Lógica) entre os dois números. Um bitwise "AND" retorna uma operação lógica "E" entre os dois operandos em binário. Por exemplo: "0110 AND 0011" retorna "0010". Isso porque o algarismo 1 somente está equivalente na terceira casa dos dois números. Para mais detalhes veja http://en.wikipedia.org/wiki/Logical_conjunction .

That's all folks!


CarlosMoraisDosSantos