var test = 5.5;
0|test; // 5
Já vi o uso da ~
operação bit a bit para retirar decimais de um número. A razão de ele funcionar é porque o uso de operações bit a bit converte um número em um inteiro de 32 bits com sinal. Usar o NOT bit a bit ~
duas vezes fará o seguinte:
- converter o número atual em um inteiro com sinal.
- executa a operação NOT, que converte todos os bits 0 em 1s e 1s em 0.
- executa a operação NOT (novamente), retornando o número ao seu estado anterior.
Embora isso seja legal e tudo, usar a operação bit a bit OR 0|
compara dois números e cria um novo número em que um dos bits é 1. Então, fazer 0|test
o seguinte:
- converte o teste em um inteiro assinado
- executa a operação OR, que irá:
- verifique os 1s no 0 (que, não há nenhum)
- verifique se há 1s em
test
- Retorna a versão inteira assinada do teste (já que 0 tem 0 1s)
Não fiz nenhum teste de desempenho nisso … mas fundamentalmente parece melhor fazer isso do que virar e inverter todos os 1s e 0s.
Alguns documentos bitops aqui
Com tudo isso dito, por favor, não faça isso. 🙂 É super ilegível, e você tem a possibilidade de perder informações se o número for maior que 2 ^ 32.