Operador bit-a-bit NOT -
Rodney Francalim - 23.01.2015
@RESOLVIDO:
Leia primeiro a dъvida, depois venha aqui saber o porquк.
Й basicamente assim:
O 0 em binбrio й representado desta forma:
Код:
0 = 00000000000000000000000000000000 = 0
Quando o bit-a-bit NOT й usado, ele, de fato, inverte todos os bits, entгo:
Код:
~0 = 11111111111111111111111111111111 = -1
O mesmo ocorre com o 1:
Код:
1 = 00000000000000000000000000000001 = 1
Aplicando o operador bit-a-bit NOT:
Код:
~1 = 11111111111111111111111111111110 = -2
Й basicamente isso.
@DЪVIDA
Entгo, pessoal, tava fazendo uns negуcios aqui, e me deparei com a seguinte situaзгo:
pawn Код:
if(response)
var[0] = strval(inputtext);
else
var[1] = strval(inputtext);
Como nуs sabemos, ou response recebe 1, ou recebe 0 (e response
nгo й booleana). Entгo eu usei o operador bit-a-bit NOT pra fazer o seguinte:
Se response for igual а 1, a cйlula 0 vai receber o inputtext, se nгo a celula 1 й quem vai receber.
Ora, como reduzir essas 4 linhas em uma sу? Aн me veio o operador bit-a-bit NOT na cabeзa.
Seria mais simples fazer assim:
pawn Код:
var[~response] = strval(inputtext);
/*
Vocк pode atй dizer que seria mais fбcil inverter as condicionais e fazer o botгo da esquerda
ser atribuнdo na celula 1, mas й questгo de coerкncia do meu cуdigo. :P
*/
Afinal, quando response for 1, eu usaria o operador, aн o 1 viraria um 0, vide que o bit-a-bit NOT inverte os bits, tal como o 0 viraria 1.
Mas quando eu testei no servidor nгo dava certo, nгo acontecia o que eu queria. Foi entгo que eu usei DEBUG e saiu isso:
Diante dessa situaзгo, eu acabei tendo que me sucumbir a isso:
pawn Код:
var[~response + 2] = strval(inputtext);
Mas apesar de ter dado certo, eu pergunto: por que ele foi de 1 pra -2 e de 0 pra -1?
Re: Operador bit-a-bit NOT -
n0minal - 23.01.2015
#Edit: Apуs alguns testes constatamos que:
~ й basicamente: (x * -1) - 1.
ou seja, ele vai negativar e decrescer o inteiro apуs o operador.
~0 = 0 -1 = -1
~1 = -1-1 = -2
E por aн vai...