Manipulação de números binários e Bitwise Operations

0
Filed under Computacao
Tagged as ,

Esse artigo, tem como objetivo uma explicação didática e simples do que são bitwise operations, e, para tornar o assunto um pouco mais prático, utilizo alguns exemplos em linguagem C (Sim, os códigos são livres e voce pode copiá-los para onde quiser :) .

Para um melhor entendimento, dividi o artigo em duas partes (dois posts), sendo a primeira uma parte introdutória a manipulação de números binários utilizando bits e bytes, e a segunda parte sobre bitwise em si.

– Manipulação de números binários com bits e bytes –

Todas as operaçõs de um computador são baseadas na unidade binária, ou seja zero ou um. Para representar estas unidades, são utilizados bits, onde cada bit possui apenas dois estados: ligado ou desligado, 1 ou 0.

Dependendo da informação a ser armazenada, apenas estes dois estados não são suficientes, então, utilizamos “conjuntos” de bits para podermos representar estas informações.

Como um exemplo podemos pensar no armazenamento de números decimais:

Binário     |  Decimal
0             |       0
1             |       1
10           |       2
11           |       3
100         |      4

Como podemos ver, para representar os numeros decimais (base 10) 1 ou 0, é necessário apenas um bit, porém, conforme o valor decimal é incrementado, somente estes dois bits não são suficientes, havendo então a necessidade de adicionarmos mais bits a um número para podermos representar valores maiores.

A solução então, é sempre a mesma. Vamos juntar bits até conseguir representar os valores necessários :)

Como exemplo, podemos também utilizar bits para representar o estado civil de uma pessoa, ou seja 4 estados possíveis:

00 – Solteiro
01 – Casado
10 – Divorciado
11 – Viuvo

Agora, voltando a representação em bits de numeros decimais, o que acontece se for necessário efetuar a soma de um número de 5 bits com um numero de 12 bits ?

Para efetuar tais operações, foi definida uma unidade chamada byte, sendo atribuido 8 bits a esta unidade.

A partir daí, as informações passaram a ser agrupadas e representadas por estes conjuntos. Então, se formos representar novamente os números decimais dentro de um byte, nós teríamos:

Binário   |   Decimal

00000000  |     0
00000001  |     1
00000010  |     2
00000011  |     3
00000100  |     4

Notem que agora, todos os valores obrigatoriamente possuem 8 bits.

O que acontece então, quando 8 bits não são mais suficientes ? Simples, adicione mais um byte :)

Agora, já podemos efetuar a soma de um número com 5 bits e um número com 12 bits:

Vamos então utilizar como exemplo, a soma dos números:

19 = 10011 (5bits)
3142 = 110001000110 ( 12 bits)

Como os números acima não possuem a quantidade de bits necessárias para preencher um byte, os bits restantes serão preenchidos com zero. então temos:

19   = 00010011            ( 1 byte )
3142 = 00001100 01000110   ( 2 bytes )

Para efetuar a soma, podemos então utilizar a mesma regra que é utilizada para números decimais, como exemplo, 9 + 1 = 0 e vai um :) lembrando apenas que neste caso estamos utilizando base dois, o que significa entao:  1 + 1 = 0 e vai um :)

19   =   00000000 00010011
3142 =   00001100 01000110
3161 =     00001100 01011001

Tentem reparar no método como é efetuada a soma ( 1 + 1 = 0 e vai um ).

Não vou abordar nesse artigo a conversão binária -> decimal e vice-versa, mas uma boa técnica para efetuar isso, é utilizando uma tabela como abaixo:

128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
————————————
0  |  0  | 0  | 1  | 0 | 0 | 1 | 1 |

Para utilizar a tabela, vamos pegar como exemplo o número 19 :  00010011

Colocamos ele na tabela, como acima.
Vamos então pegar todos os bits que estão ligados: 16, 2 e 1 e somá-los…
16 + 2 + 1 = 19

Não é maravilhoso ? =D

Prestem atenção, da direita para esquerda, há uma multiplicação por 2 entre os campos: 1 * 2 = 2, 2 * 2 = 4,  etc..

Então, o que fazer se tivermos um número com 9 bits ? multiplique o último campo (128) por 2, e adicione o 9º bit (256).
Reparem também, que se enumerarmos cada bit da direita para a esquerda (0, 1 ,2, 3, 4, 5, 6, 7), descobrimos que o numero do bit é o expoente que deve ser utilizado a base 2. ou seja, se pegarmos o sétimo bit (128) e efetuarmos 2^7, teremos o valor do campo (128).

Nada melhor do que a estação Sé do metro as 6 da tarde

0
Filed under Uncategorized

Como diria um colega meu…

Se você está se sentindo sozinho, nada melhor do fazer uma baldeação na estação da Sé as 6 horas da tarde…

CHUVAS/SP

Ano novo, mais dinheiro jogado fora com o IPVA

0
Filed under Uncategorized

Como todo início de ano, a prefeitura não esqueceu de me mandar o boleto do IPVA para pagar… E ontem, voltando para casa, caindo uma chuva forte, passei por um buraco e arrebentei uma das rodas do meu carro.
Agora, além de pagar o IPVA (que deveria ser o dinheiro utilizado para tapar aquele buraco) vou ter que também arcar com os custos do conserto do meu carro.
Eu tento, juro que tento dizer que no Brasil as coisas não são tão ruins… mas quando estou quase me convencendo disso, acontece alguma coisa para me lembrar de quanto dinheiro eu jogo fora aqui…
Concordo que devemos pagar impostos, já que essa é a maneira do governo arrecadar dinheiro para administrar a cidade… O problema começa quando você paga impostos absurdos e não tem retorno disso…

How to create a local database with RFCs documentation

0
Filed under Uncategorized
Tagged as ,

Folks,

A friend gave me an idea of maintain on my computer a local “knowledge-base” with the RFCs documentation. So, this is very useful when you need to have some information “on hands”.

The procedure is:

- Create a directory in your home directory with the name “rfcs” and another with name “bin”:   #mkdir ~/rfcs ~/bin

- Create a new file on ~/bin with the content below:   # vim ~/bin/rfc-sync.sh

——————————————————————————

#!/bin/sh

[ -d ~/rfcs ] && cd ~ && \
until rsync -Pavz –delete –timeout=300 ftp.rfc-editor.org::rfcs-text-only rfcs; do
sleep 60
done

——————————————————————————

- Set execution permission on this file: #sudo chmod 755 ~/bin/rfc-sync.sh

- run the script

So, this is a easily way to have on hands a lot of useful (and useless)  information.

By the way, I asked my friend about read RFCs is a little boring job. So, I received the following answer:

- Boring is stay in a class where the teacher thinks that protocols was made by Gods and sent in ‘Tablets of Law” -

This sentence, the script and de idea are from my friend Fabio Olivé.

thanks Fabio =]

Votaçao Solidaria – Ong Adote um gatinho

0
Filed under Uncategorized

Pessoal, o terra está fazendo uma promoção com o sonora (tipo uma radio online), e o artista que ganhar o maior numero de votos em sua playlist irá receber um valor de R$75.000,00 (setenta e cinco mil reais) para doar a uma ong.

A cantora Pitty irá fazer esta doação para a Ong “Adote um gatinho”.  Aos que puderem, por favor acessem o site:

http://sonora.terra.com.br/#/vote e votem na playlist da Pitty.  A votação é rapida.

Pra conferir o site da ong:  http://www.adoteumgatinho.org.br

Abraços..

A little trick to use C pointers

0
Filed under Uncategorized
Tagged as , , ,

Hi,

I was studying C pointers during this night, and I found an article talking about a little trick to avoid some simple errors when using pointer in a C code.

This is the link to the article.

http://c-unix-linux.blogspot.com/2009/04/refresh-your-pointers-knowledge.html

Have a nice fun with pointers  =]

Decepção

3
Filed under Uncategorized

Ok ,esse post é mais um desabafo, então só vou escrever em pt-br.

É difícil explicar uma situação que presenciei estes dias mas somente tive tempo e paciencia para blogar agora. Uma situação que me deixou com um sentimento estranho, um pouco decepcionado, e triste também.

Hoje (ok não sou tão velho assim), agradeço ao meu pai por ter me ensinado uma das maiores lições de vida que já aprendi: “Nada que vem fácil, você dá valor”.

Agora, por que estou dizendo isso aqui  ?

Porque é triste de ver quando uma pessoa tem nas mãos de forma fácil aquilo que você lutou e muito pra conseguir. Não é inveja (prometo :) , mas é triste ver uma pessoa desvalorizando algo que você considera extraordinário.

Imagina assim,  duas pessoas.  Uma delas ganhou um fusca de presente de formatura e a outra conseguiu juntar uma graninha e comprar um fusca. O que será que acontece ? a pessoa que ganhou o fusca provavelmente vai dizer “ganhei uma merda de carro, poderia ter sido um melhor”. Enquanto o que conseguiu comprar vai lavar o fusca todo sábado, trocar o óleo a cada 5 mil kilometros, cuidar muito bem do carro.

Agora imagina você, a pessoa que conseguiu comprar o fusca, escutando a outra pessoa dizendo “ganhei uma merda de carro, um carro podre”.

Não que as coisas não tenham vindo fáceis p/ mim, afinal, tive uma boa educação (apesar de ter tomado muita porrada do meu pai pra isso :) , uma casa boa, um video game legal, computador, comida na mesa, roupa lavada, etc..

Mas meu pai sempre disse que eu tinha de aprender a conquistar as coisas com meu próprio esforço. Que na vida, nada vinha fácil. Como Kardec também dizia, o trabalho enobrece o homem. Que assim seja.

Acho que pelo menos isso eu aprendi com meu pai.

E agradeço a poucos mas verdadeiros amigos, que me ajudam a superar a verdadeira decepção de ver pessoas jogando ‘ouro’ no lixo.

Pai, mais uma vez, obrigado pelo que me ensinou.

Meus queridos amigos, obrigado por me ajudarem a suportar tamanha decepção.

KVM Bridge Network

2
Filed under Uncategorized

Pt-Br

Pessoal, reescrevi meu artigo sobre rede em modo Bridge no KVM que esta publicado no meu antigo blog e publiquei ele no site.

Quem se interessar, acesse o link no fim do post.

En-Us

Folks, I rewrote my article about Bridge Network in KVM that’s published on my old blog and I published this new article in my web site:

Look the link below.

http://www.maiolino.org/site/index.php?option=com_content&view=article&id=46:bridge-network-kvm&catid=34:virtualization&Itemid=55

Let’s do It

0
Filed under Uncategorized
Tagged as ,

Pessoal, eu tinha este post em meu antigo blog, mas achei interessante transpor aqui.

Algumas pessoas ainda assimilam o modelo “Open Source” somente a software, a possibilidade de se ler o código de um programa, a software livre, etc. É importante lembrar, que o modelo Open Source está diretamente relacionado ao fato das pessoas contribuirem voluntariamente a um determinado projeto, seja lá ele qual for.

Um software, o desenvolvimento de uma metodologia de estudos, a elaboração de uma aula de história, química, etc. com o intuito de tornar aquele projeto o melhor e mais útil possível a comunidade, ao mundo. O link abaixo é um vídeo (legendado em portugues) sobre um projeto realizado na Estônia, utilizando-se do modelo Open Source. É impressionante os resultados que um pouco de boa vontade e algum esforço podem realizar. Seria ótimo se os demais países do mundo adotassem também esta iniciativa.

Novo Blog / New Blog

0
Filed under Uncategorized

Pt-Br

Amigos,

bem-vindos ao meu novo blog.  Como alguns sabem estou “abandonando” o meu antigo blog http://cybers0nic.blogspot.com, e iniciando este novo em um dominio dedicado, com uma organizaçao um pouco diferente.

Pretendo adicionar todos os posts aqui em portugues e tambem em ingles por ter alguns amigos que nao falam portugues.

Quando for postar algum artigo/dica, etc que seja meio extenso (como por ex. o post sobre ponteiros no blog antigo), pretendo adicionar o artigo no meu site (http://www.maiolino.org), e adicionar aqui apenas uma nota para o artigo. Assim creio que o blog fica mais limpo e um pouco mais organizado.

Bom, tambem sou pessimo em organizaçao e administraçao de sites (ainda bem que nao vivo disso), entao, qualquer critica/sugestao sao bem-vindas.

Abraços.

Us-En

Hi friends,

Welcome to my new blog. Like some people knows, I’ m “abandoning” my old blog http://cybers0nic.blogspot.com, and starting this new blog at a dedicated domain with a different organization.

I hope write all posts on Portuguese and English, because I have some friend who does not speak Portuguese.

When I’ll write any article/hint, etc that can be a little extensive (ex: my post about pointers in C on my old blog), I hope add this article on my web site (http://www.maiolino.org), and add here only a note and a link to the article. With this model, I guess my blog can be cleaner and a little bit more organized.

Well, I’m so bad with site organization and administration (I’m glad I don’t work directly with it), so, any suggestions are welcome

by the way, sorry for some mistakes with English, I’m doing my best effort to improve it :)

Bye.