[Ajuda] Operador bit-a-bit NOT
#1

@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?
Reply
#2

#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...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)