0x38 Opções Binárias


O Best Binary Options Broker As operações de negociação oferecidas neste site podem ser consideradas operações de negociação de alto risco e sua execução pode ser muito arriscada. Comprar instrumentos financeiros ou utilizar os serviços oferecidos no site pode resultar em perdas significativas ou mesmo em uma perda total de todos os fundos em sua conta. Você tem direitos limitados e não transferíveis limitados para usar o IP fornecido neste site para fins pessoais e não comerciais em relação aos serviços oferecidos apenas no site. A Companhia atua fora da Federação Russa. Eu. iqoption é detida e operada pela Iqoption Europe Ltd. IQ Option, 2013-2016 As informações de recuperação de senha foram enviadas com sucesso para o seu e-mail O registro está indisponível na Federação Russa. Se você acha que está vendo esta mensagem por engano, entre em contato com supportiqoption. Deslize os bits de uma b etapas à direita (cada passo significa quotdivide por twoquot) O bit shifting em PHP é aritmético. Bits deslocados de qualquer extremidade são descartados. Os turnos à esquerda têm zeros deslocados na direita enquanto o bit do sinal é deslocado para fora do lado esquerdo, o que significa que o sinal de um operando não é preservado. Os turnos certos têm cópias do bit de sinal deslocado na esquerda, o que significa que o sinal de um operando é preservado. Use parênteses para garantir a precedência desejada. Por exemplo, um amp b true avalia a equivalência, então o bit a bit e while (a amp b) true avalia o bit a bit e depois a equivalência. Se ambos os operandos para o amplificador. E as operadoras são strings, então a operação será executada nos valores ASCII dos caracteres que compõem as strings e o resultado será uma string. Em todos os outros casos, ambos os operandos serão convertidos em números inteiros e o resultado será um número inteiro. Se o operando para o operador for uma string, a operação será executada nos valores ASCII dos caracteres que compõem a string e o resultado será uma string, caso contrário o operando e o resultado serão tratados como números inteiros. Ambos os operandos eo resultado para os operadores ltlt e gtgt são sempre tratados como números inteiros. Exemplo 1 Operações Bitwise AND, OR e XOR em inteiros ltphp Ignore a seção superior, é apenas formatação para tornar a saída mais clara. Formato (12d 104b) (22d 204b). 3s (42d 404b). N valores array (0. 1. 2. 4. 8) teste 1 4 echo n Bitwise AND n foreach (valores como valor) valor do resultado teste do amplificador printf (formato. Resultado. Valor. Teste do amplificador) echo n Bitwise Inclusive OR n Foreach (valores como valor) teste de valor de resultado printf (formato. Valor do resultado.) Teste) echo n Bitwise Exclusive OR (XOR) n foreach (valores como valor) resultado valor teste printf (formato. Resultado, valor ... teste) gt O exemplo acima será exibido: Exemplo 2 Operações XOR Bitwise em cadeias de caracteres ltphp echo 12 9 Saídas 5 eco 12 9 Emite o caractere Backspace (ascii 8) (1 (ascii 49)) (9 (ascii 57)) 8 echo hallo hello Emite o Valores de ascii 0 4 0 0 0 ae 4 eco 2 3 Saídas 1 2 ((int) 3) 1 eco 2 3 Saídas 1 ((int) 2) 3 1 gt Exemplo 3 Mudança de bit em números inteiros ltphp Aqui estão os exemplos. Echo n --- BIT SHIFT DIREITO SOBRE INTEGERS POSITIVOS --- n val 4 lugares 1 res val gtgt lugares p (res valv. Gtgt. Lugares. Cópia do bit do sinal deslocado para o lado esquerdo) val 4 lugares 2 lugares valv vale P (res. Val. Gtgt. Places) val 4 lugares 3 res val gtgt lugares p (res. Val. Gtgt. Lugares. Bits mudam para o lado direito) val 4 lugares 4 res val gtgt lugares p (res valv. Gtgt. Lugares. O mesmo resultado acima não pode mudar além de 0) eco n --- BIT SHIFT DIREITO EM INTEJOS NEGATIVOS --- n val - 4 lugares 1 res val gtgt lugares p (res. Val. Gtgt. Places. Cópia do bit de sinal Deslocou para o lado esquerdo) val - 4 lugares 2 lugares de res val gtgt p (res. Val. Gtgt. Lugares. Bits mudam para o lado direito) val - 4 lugares 3 res val gtgt lugares p (res. Val. Gtgt. Places. Same Resultado como acima não pode mudar para além de -1) eco n --- BIT SHIFT ESQUERDO EM INTEGENTES POSITIVOS --- n val 4 lugares 1 res val ltlt lugares p (res. Val. ltlt. Lugares. Zeros preencher no lado direito) val 4 lugares (PHPIN TSIZE 8) - 4 res val ltlt lugares p (res. Val. Ltlt. Lugares) val 4 lugares (PHPINTSIZE 8) - 3 res val ltlt lugares p (res. Val. ltlt. Lugares. Bits de sinal são deslocados para fora) val 4 lugares (PHPINTSIZE 8) - 2 res val ltlt lugares p (res valv. Ltlt. Lugares. Bits mudam para o lado esquerdo) echo n --- BIT SHIFT ESQUERDO EM INTEJOS NEGATIVOS --- n val - 4 lugares 1 res val ltlt lugares p (res. Val. ltlt. Lugares. Zeros preencher no lado direito) Val - 4 lugares (PHPINTSIZE 8) - 3 res val ltlt lugares p (res. Val. ltlt. Places) val - 4 lugares (PHPINTSIZE 8) - 2 res val ltlt lugares p (res. Val. Ltlt. Places. Bits shift Lado esquerdo, incluindo bit de sinal) Ignore esta seção inferior, é apenas formatação para tornar a saída mais clara. Função p (res. Val. Op. Places. Note) formato 0. (PHPINTSIZE 8). Bn printf (Expressão: dds dn. Res. Val. Op. Lugares) echo Decimal: n printf (valdn. Val) printf (resdn. Res) echo Binário: n printf (val. Format. Val) printf (formato res. Res) se (nota) eco NOTA: nota n Saída do exemplo acima em máquinas de 32 bits: BANDEIRAS BITWISE para Objetos PHP Personalizados Às vezes eu preciso de um Objeto PHP personalizado que contenha vários valores VERDADEIROS ou FALSOS booleanos. Eu poderia facilmente incluir uma variável para cada um deles, mas, como sempre, o código tem uma maneira de tornar-se muito rápido. Uma abordagem mais inteligente sempre parece ser a resposta, mesmo que pareça ser um exagero no início. Eu começo com uma classe base abstrata que irá armazenar uma única variável inteira chamada flags. Este inteiro simples pode conter 32 valores booleanos VERDADEIROS ou FALSOS. Outra coisa a considerar é apenas configurar certos valores BIT sem perturbar nenhum outro BITS - então, incluído na definição da classe, é a função setFlag (bandeira, valor), que definirá apenas o bit escolhido. Heres a definição da classe base abstrata: classe abstrata Bandeiras protegidas BitwiseFlag Observação: estas funções são protegidas para evitar que o código externo configure falsamente o BITS. Veja como o usuário da classe que se estende manipula isso. Função protegida isFlagSet (flag) return ((this - gt flags amp flag) flag) função protegida setFlag (flag. Value) if (value) this - gt flags flag else this - gt flags amp A classe acima é abstrata e não pode ser instanciada , Então uma extensão é necessária. Abaixo está uma extensão simples chamada Usuário - que é severamente truncado para maior clareza. Observe que estou definindo constantes variáveis ​​e métodos para usá-los. Classe O usuário se estende BitwiseFlag const FLAGREGISTERED 1 BIT 1 de flags tem o valor 1 const FLAGACTIVE 2 BIT 2 de flags tem o valor 2 const FLAGMEMBER 4 BIT 3 de flags tem o valor 4 const FLAGADMIN 8 BIT 4 de flags tem o valor 8 public function IsRegistered () retorna este - gt isFlagSet (self. FLAGREGISTERED) função pública isActive () retorna this - gt isFlagSet (self. FLAGACTIVE) função pública isMember () retorna this - gt isFlagSet (self. FLAGMEMBER) função pública isAdmin () retorna isso - gt isFlagSet (self. FLAGADMIN) função pública setRegistered (value) this - gt setFlag (self. FLAGREGISTERED. Value) função pública setActive (value) this - gt setFlag (auto. Valor FLAGACTIVE.) Função pública setMember (value) this - Gt setFlag (auto. FLAGMEMBER. Value) função pública setAdmin (value) this - gt setFlag (auto. FLAGADMIN. Value) função pública toString () return User. (This - gt isRegistered (). REGISTRADO.). (This - gt isActive (). ACTIVE.). (This - gt isMember (). MEMBER.). (This - gt isAdmin (). ADMIN.). Isso parece muito trabalho, mas abordamos muitos problemas, por exemplo, usar e manter o código é fácil, e a obtenção e configuração de valores de bandeira tem sentido. Com a classe User, agora você pode ver como as operações de bandeira bitwise fácil e intuitiva se tornam. Usuário novo usuário () usuário - gt setRegisterado (verdadeiro) usuário - gt setActive (verdadeiro) user - gt setMember (verdadeiro) user - gt setAdmin (verdadeiro) echo output do usuário: User REGISTRADO ACTIVE MEMBER ADMIN zlel grxnslxves13 no hotmail dot com Eu me refiro Para Eric Swansons post na implementação de xl do Perl VS PHPs. Na verdade, isso não é um problema com a implementação do XOR, mas muito mais a ver com a política de digitação perdida que o PHP adota. Alternar livremente entre int e flutuante é bom para a maioria dos casos, mas os problemas ocorrem quando seu valor está perto do tamanho da palavra da sua máquina. Ou seja, máquinas de 32 bits encontrarão problemas com valores que flutuam em torno de 0x80000000 - principalmente porque o PHP não suporta inteiros não assinados. O uso de bindec decbin abordaria esta questão como um trabalho para fazer unsigned-int xor, mas heres a imagem real (não estou afirmando que esse código funcionará melhor, mas este seria um melhor código pedagógico): function unsignedxor32 (a. B) a1 um amplificador 0x7FFF0000 a2 um amplificador 0x0000FFFF a3 um amplificador 0x80000000 b1 b amp 0x7FFF0000 b2 b amp 0x0000FFFF b3 b amp 0x80000000 c (a3 b3). 0x80000000. 0 return ((a1 b1) (a2 b2)) cx 3851235679 y 43814 echo ltbrgtEste é o valor que queremos echo ltbrgt3851262585 echo ltbrgtO resultado de uma operação xor nativa em valores inteiros é tratado como um inteiro assinado echo ltbrgt. (Xy) echo ltbrgtWe Portanto, execute o MSB separadamente echo ltbrgt. Unsignedxor32 (x. Y) Este é realmente um assunto fundamental, mas para aqueles de vocês que perderam isso na faculdade, parece haver algo no complemento 2s aqui: Inicialmente, achei que o bitmasking era um conceito confuso e não era útil para isso. Então, eu tentei este fragmento de código no caso de alguém estar confuso: os vários detalhes que um veículo pode ter tem quatro rodas 1 temTwoWheels 2 hasDoors 4 hasRedColour 8 bike hasTwoWheels golfBuggy hasFourWheels ford hasFourWheels hasDoors ferrari hasFourWheels hasDoors hasRedColour isBike temFourWheels amp bike Falso, porque bike doenst tem Quatro rodas isGolfBuggy temFourWheels amp golfBuggy True, porque golfBuggy tem quatro rodas isFord hasFourWheels amp ford True, porque ford hasFourWheels E você pode aplicar isso a muitas coisas, por exemplo, segurança: Permissões de segurança: writePost 1 readPost 2 deletePost 4 addUser 8 deleteUser 16 Grupos de usuários: administrador writePost readPostts deletePostts addUser deleteUser moderador readPost deletePost deleteUser escritor writePost readPost guest readPost função para verificar a permissão função checkPermission (usuário. Permissão) se (permissão do amplificador do usuário) retornar true else return Falso Agora aplicamos tudo isso se (checkPermission (administrador. DeleteUser)) deleteUser (Some User) Isso é executado porque o administrador pode excluirUser Uma vez que você consegue sua cabeça, é muito útil Apenas lembre-se de aumentar cada valor pelo poder de dois para evitar problemas. Apenas uma nota sobre valores de mudança negativa, como o Os estados de documentação de cada turno é um número inteiro multiplicar ou dividir (esquerda ou direita, respectivamente) em 2. Isso significa que um valor de mudança negativa (o operando da mão direita) efetua o sinal da mudança e NÃO a direção da mudança como eu esperava. FE. 0xff gtgt -2 resulta em 0x0 e 0xff ltlt -2 em 0xFFFFFFFFC0000000 (dependente do PHPINTMAX) Quanto ao que Bob disse sobre bandeiras, eu gostaria de salientar que existe uma maneira segura de definir bandeiras, que está usando a notação hexadecimal para números inteiros: ltphp Definir (f0. 0x1) 20 definir (f1. 0x2) 21 definir (f2. 0x4) 22 definir (f3. 0x8) 23 definir (f4. 0x10) 24 definir (f5. 0x20) 25. Define (f20. 0x1000000) 220 define (f21. 0x2000000) 221 define (f22. 0x4000000) 222 define (f23. 0x8000000) 223 define (f24. 0x10000000) 224. Até 231 gt. Eu sempre evito usar a notação decimal quando eu tenho uma grande quantidade de bandeiras diferentes, porque é muito fácil de escrever números errados como 220 (1048576). Implementação Perl vs. PHP do operador: depois de tentar traduzir um módulo Perl para o PHP, percebi que a implementação do Perls do operador é diferente da implementação do PHP. Por padrão, Perl trata as variáveis ​​como flutuadores e PHP como números inteiros. Consegui verificar o uso do PHP pelo operador, indicando o número inteiro de uso dentro do módulo Perl, que fornece exatamente o mesmo resultado que o PHP estava usando. A decisão lógica seria converter todas as variáveis ​​como (flutuante) ao usar o operador em PHP. No entanto, isso não produzirá os mesmos resultados. Depois de cerca de meia hora de bater minha cabeça contra a parede, descobri uma gema e escrevi uma função usando as conversões binárias-decimais em PHP. Não tenho muita experiência com operações bit a bit, não posso dizer que esta é a melhor solução, mas certamente é uma solução que finalmente funciona e sempre retorna o mesmo resultado que o Perl fornece. Função binxor (a, b) return bindec (decbin ((float) a (flutuante) b)) o código PHP normal não dará o mesmo resultado que o resultado Perl 3851235679 43814 -443704711 para obter o mesmo resultado que Perl result binxor (3851235679, 43814) 3851262585 YIPPEE. Para ver as diferenças, experimente o seguinte: 3851235679 XOR 43814 b 3851235679 43814 resultado inteiro c (flutuador) 3851235679 (flutuador) 43814 mesmo que b d binxor (3851235679, 43814) o mesmo que Perl Aqui é um exemplo para bitrocidade e direita. Observe que esta função funciona apenas com números decimais - outros tipos podem ser convertidos com o pacote (). Função rotear (decimal. Bits) binário decbin (decimal) return (bindec (substr (binário bits). Substr (binário. 0. bits))) Gire 124 (1111100) para a esquerda com 1 bit echo rotate (124. 1 ) Gire 124 (1111100) para a direita com 3 bits echo rotate (124. - 3) Para aqueles que procuram uma função de mudança de bit circular em PHP (especialmente útil para funções criptográficas) que funciona com valores negativos, aqui é um pouco Função que escrevi: (Nota: demorou quase um dia inteiro para que isso funcionasse com valores numéricos negativos (não consegui descobrir por que às vezes funcionava e outras vezes não), porque o PHP só possui um direito aritmático e não um direito a bit lógico Mude como se eu estivesse acostumado. Ie 0x80000001gtgt16 irá ouputs (em binário) 1111 1111 1111 1111 1000 0000 0000 0000 em vez de 0000 0000 0000 1000 0000 0000 0000 como você esperaria. Para consertar isso, você deve aplicar a máscara (por bit a bit Amp) igual a 0x7FFFFFFF deslocado para a direita um menos que o deslocamento que você está mudando. ) Deslocamento circular da função ltphp (num. Offset) num (int) num mask 0x7fffffff Máscara para atender ao fato de que o PHP apenas faz mudanças aritmáticas corretas e não é lógico, por exemplo, o PHP não fornece saída esperada quando valores negativos de mudança direta se (offset gt 0) num (num ltlt offset 32) ( (Numero gtgt (32 - offset 32)) amp (mask gtgt (31 - offset 32)) elseif (offset lt 0) offset abs (offset) num ((compensador num gtgt 32) amp (mask gtgt (- 1 offset 32 ))) (Num ltlt (32 - offset 32)) return num gt note que os operadores de turno são aritméticos, não como lógica como em C. Você pode obter resultados inesperados com números negativos, veja en. wikipedia. org wiki Bitwiseoperation heres uma função Para fazer mudanças na lógica correta. Função lshiftright (var. Amt) máscara 0x40000000 se (var lt 0) var amp 0x7FFFFFFF mascara máscara gtgt (amt - 1) return (var gtgt amt) mask return var gtgt amt printf (deslocamento aritmético em um integerltbrgt1032bltbrgt2032bltbrgt10dltbrgt20dltbrgt negativo val. Val gtgt 1) printf (deslocamento da lógica em um integerltbrgt1032bltbrgt2032bltbrgt10dltbrg20dltbrgt negativo) val. lshiftright (val. 1)) printf (mudança de lógica em um integerltbrgt1032bltbrgtbrgt2032bltbrgt10dltbrgt20dltbrgt positivo, - val. Lshiftright (- val.1)) gt dá a saída: deslocamento aritmético em um negativo Número inteiro 11111111111111111111111111110110 11111111111111111111111111111011 -10 -5 mudança de lógica em um inteiro negativo 111111111111111111111111110110 01111111111111111111111111111011 -10 2147483643 mudança lógica em um inteiro positivo 00000000000000000000000000001010 00000000000000000000000000000101 10 5 Diga. Você realmente quer dizer. Mais de 31 bits disponíveis para você em sua bitmask feliz. E você não quer usar flutuadores. Então, uma solução seria ter uma série de bitmasks, que são acessadas através de algum tipo de interface. Aqui está a minha solução para isso: uma classe para armazenar uma série de números inteiros sendo as bitmasks. Ele pode armazenar até 66571993087 bits e liberar máscaras de bits não utilizadas quando não há bits sendo armazenados nelas. Ltphp bits infinitos e gerenciamento de bits em geral. Não é infinito, desculpe. Percebentemente, o único limite para a classe bitmask no armazenamento de bits seria o limite máximo do número de índice, em sistemas inteiros de 32 bits 231 - 1, então 231 31 - 1 66571993087 bits, assumindo que os flutuadores são de 64 bits ou algo assim. Tenho certeza de que é suficiente para qualquer coisa. Eu esperei. DEFINIR (INTEGERLENGTH. 31) Batido assinado estúpido. Classe bitmask protected bitmask array () conjunto de funções públicas (bit) Definir alguma tecla de bit (int) (bit INTEGERLENGTH) bit (int) fmod (bit. INTEGERLENGTH) this - gt bitmask key 1 ltlt bit public function remover (bit) Remover alguns Bit bit (int) (bit INTEGERLENGTH) bit (int) fmod (bit. INTEGERLENGTH) este - gt bitmask key amp (1 ltlt bit) se (esta - gt bitmask key) unset (esta - gt bitmask key) função pública toggle ( Bit) Toggle bit bit (int) (bit INTEGERLENGTH) bit (int) fmod (bit. INTEGERLENGTH) this - gt bitmask key 1 ltlt bit se (esta - gt bitmask key) unset (esta - gt bitmask key) public function read (Bit) INTEGERLENGTH) bit (int) fmod (bit INTEGERLENGTH) retorna este - gt bitmask key amp (1 ltlt bit) public function stringin (string) Leia uma série de bits que podem ser Até a quantidade máxima de bits por muito tempo. This - gt bitmask array () array strsplit (strrev (string), INTEGERLENGTH) foreach (array como chave gt value) if (value bindec (strrev (value))) this - gt bitmask key value public function stringout () Imprima um Seqüência de caracteres de suas pequenas chaves de string de bits pequenos (este - gt bitmask) classificar (chaves. SORTNUMERIC) para (i arraypop (chaves) i gt 0 i -) se (este - gt bitmask i) string. Sprintf (0. INTEGERLENGTH. B. This - gt bitmask i) retornar string public function clear () Purgar esta - gt bitmask array () public function debug () Veja o que está acontecendo no seu bitmask array vardump (this - gt bitmask) gt Ele trata uma entrada inteira positiva como um bit, então você não precisa lidar com os poderes de você mesmo. Ltphp bitmask new bitmask () bitmask - gt set (8979879) Qualquer que seja o bitmask - gt set (888) if (bitmask - gt read (888)) print Happyn bitmask - gt toggle (39393) Yadda yadda bitmask - gt remover (888) bitmask - gt debug () bitmask - gt stringin (100101000101001000101010010101010 00000001000001) print bitmask - gt stringout (). N bitmask - gt debug () bitmask - gt clear () bitmask - gt debug () gt Herere minhas operações de descarte de descarte de 32 bits para aqueles que possuem algoritmos de criptografia de C. Seja avisado de que alguns deles não são muito eficientes comparados Para as operações nativas, especialmente quando chamado por algoritmos de criptografia de alta capacidade -, mas não descartar o bit de transporte, talvez você não obtenha os mesmos resultados obtidos em C, simplesmente porque as operações bit a bit do PHP não foram projetadas para funcionar em registros de tamanho fixo. (Se o seu algoritmo de criptografia portada ainda o doente lhe dá os mesmos resultados, lembre-se de verificar sua função de Endianidade) BFSHR32 (x, bits) se (bits0) retornar x se (bits32) retornarem 0 y (x amp 0x7FFFFFFF) bits de gtgt se (0x80000000 amp x) y (1ltlt (31 bits)) retornar y função BFSHL32 (x, bits) se (bits0) retornar x se (bits32) retornar 0 máscara (1ltlt (32 bits)) - 1 retorno ((x Máscara de amplificador) ltlt bits) amp 0xFFFFFFFF função BFGETBYTE (x, y) retorno BFSHR32 (x, 8 y) amp 0xFF função BFOR32 (x, y) retorno (xy) amp 0xFFFFFFFF função BFADD32 (x, y) xx amp 0xFFFFFFFF aa amp 0xFFFFFFFF total 0 carregar 0 para (i0 ilt4 i) bytex BFGETBYTE (x, i) bytey BFGETBYTE (y, i) soma bytex bytey resultado soma amplificador 0xFF carryforward BFSHR32 (soma, 8) soma resultado carry resultado soma amp 0xFF carry carryforward BFSHR32 ( Soma, 8) BFOR32 total (BFSHL32 (resultado, i8), total) Se, como eu, você nunca pensou em como o PHP lida com o binário, a saída do NOT Bitwise pode confundir você. Por exemplo, isto: echo Bin:. Decbin (bin). Bin:. Decbin (notbin). N Bin: 10 bin: 11111111111111111111111111111111111111111111111111111111111101 A razão é que todos os números binários são tratados como 32 bits, mesmo que você tenha entrado manualmente menos. Para obter o resultado que eu esperava (01), era necessário AND o resultado com o número de bits que eu queria: neste caso, 2 (o número 3, em decimal). Esteja ciente de que todos os valores de retorno terão zeros removidos da esquerda até atingir um bit que esteja definido como 1. Continuando o exemplo acima, o seguinte: bin amp 3 echo bin amplificador 3:. Decbin (notbin2). N Note que o valor real foi uma string de 31 zeros seguido por um 1, mas os zeros não foram exibidos. Provavelmente isso é bom. Além disso, o operador NOT usa dois complementos, o que significa que o número que você obtém pode ser ainda mais estranho do que o esperado: o uso de dois complementos significa que 2 -3. Há uma abundância de boas explicações de dois complementos online, então não vou entrar nessa questão aqui. Se o que quiser é apenas inverter uma seqüência de bits sem qualquer interpretação, você pode usar uma função como esta: é necessária uma string binária de qualquer comprimento, inverte os bits e retorna a nova string. Você pode então tratá-lo como um número binário, use bindec () para transformá-lo em decimal ou o que quiser. Eu espero que isso ajude alguém tanto quanto isso me ajudou há uma semana Exemplo de função usando operações bit a bit para converter cor hexadecimal (geralmente dado como 6 seqüência de dígitos hexadecimais, em inteiros RGB separados) função hex2rgb (hex) dec hexdec (hexcolor) Hexadecimal para valor decimal r dec amp hexdec (FF0000) Máscara para vermelho g dec amp hexdec (00FF00) Máscara para verde b dec amp hexdec (0000FF) Máscara para matriz de retorno azul (r gtgt 16. g gtgt 8. b) Shift cheio Direito a cada cor da sua posição original gt ltphp rgb hex2rgb (112233) eco vermelho:. Rgb 0. N echo verde:. Rgb 1. N eco azul:. Rgb 2. N gt vermelho: 17 verde: 34 azul: 51 Desde: dechex (17) 11 dechex (34) 22 dechex (51) 33 Tenha muito cuidado quando XOR-ing strings Se um dos valores estiver vazio (0, nulo) O resultado também estará vazio ltphp vardump (1234 0) int (1234) vardump (1234) int (1234) vardump (1234 null) int (1234) vardump (hello world 0) int (0) vardump (hello world) string (0 ) Vardump (hello world null) int (0) gt Isto parece um comportamento bastante inconsistente. Um inteiro XORd com zero resulta no inteiro original. Mas uma string XORd com um valor vazio resulta em um valor vazio. Minha função de hashing de senha sempre retornou o mesmo hash. Porque eu estava com XOR-ing com um sal que às vezes estava vazio Aqui está uma maneira fácil de usar a operação bit a bit para a funcionalidade da bandeira. Por isso, quero dizer, gerenciar um conjunto de opções que podem estar ON ou OFF, onde zero ou mais dessas opções podem ser definidas e cada opção só pode ser definida uma vez. (Se você está familiarizado com o MySQL, pense em definir o tipo de dados). Nota: para programadores mais antigos, isso será óbvio. Aqui está o código: ltphp function setbitflag (variable-length args) val 0 foreach (funcgetargs () como flag) val val flag return val function isbitflagset (val flag) return ((val amp flag) flag) Definir suas bandeiras definidas ( MYFLAGONE. 1) 0001 define (MYFLAGTWO. 2) 0010 define (MYFLAGTHREE. 4) 0100 define (MYFLAGFOUR. 8) 1000 gt Devo apontar: suas bandeiras são armazenadas em um único inteiro. Você pode armazenar lotes de bandeiras em um único número inteiro. Para usar minhas funções, diga que você queria definir MYFLAGONE e MYFLAGTHREE, você usaria: ltphp myflags setbitflags (MYFLAGONE. MYFLAGTHREE) gt Nota: você pode passar em setbitflags () tantas bandeiras para definir como quiser. Quando você quer testar mais tarde se um determinado sinalizador estiver configurado, use, por exemplo: ltphp if (isbitflagset (myflags. MYFLAGTWO)) echo MYFLAGTWO está configurado gt. A única parte complicada é a definição de suas bandeiras. Aqui está o processo: 1. Escreva uma lista de suas bandeiras 2. Conte-las 3. Defina a última bandeira em sua lista como 1 vezes 2 para o poder de ltcountgt menos uma. (I. E. 12 (ltcountgt-1)) 3. Trabalhando para trás através de sua lista, do último para o primeiro, defina cada um como metade do anterior. Você deve chegar a 1 quando chegar ao primeiro. Se você quer entender melhor os números binários, os bits e a operação bit a bit, a página wikipedia explica bem - en. wikipedia. org wiki Bitwiseoperation. Espero que isso possa ajudar alguém a entender a diversão dos Operadores Bitwise. O objetivo desta função é retornar um valor do GPC (Get, Post e Cookie) e fazer algumas formatações básicas dependendo do valor VALIDATION: function RETURNSUBMITTEDVALUE (VARIABLE. METHOD. VALIDATION) if (METHOD POST) if (isset (POST VARIABLE)) POST VARIABLE VALUE POST VARIABLE else (METHOD COOKIE) se (isset (COOKIE VARIABLE)) COOKIE VARIABLE VALUE COOKIE VARIABLE else if (isset (GET VARIABLE)) OBTENHA VARIABLE VALUE OBTENHA VARIABLE se (iniget (magicquotesgpc) true) VALUE stripslashes (VALUE) se ((VALIDATION amp 8) 8) VALUE (int) VALUE se ((VALIDATION amp 4) 4) VALUE strtolower (VALUE) if ((VALIDATION amp 2) 2) VALUE striptags (VALUE) se (( VALIDATION amp 1) 1) VALUE trim (VALUE) echo RETURNSUBMITTEDVALUE (ID. GET. 8). Ltbr gt Converter em um eco Integer RETURNSUBMITTEDVALUE (NOME. GET. 3). Ltbr gt Trim Whitespace e Strip tags HTML echo RETURNSUBMITTEDVALUE (GÉNERO. GET. 6). Ltbr gt Strip tags HTML e converter para minúsculas Para aqueles que não entendem binário, os números que você vê não são aleatórios, eles dobram a cada vez (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024.), que permite misturar e combinar a função diferente, por exemplo. 1 2 3 (Trim Whitespace Strip HTML) 2 4 6 (Strip HTML Converter para minúsculas) Não se esqueça dos zeros avançados. É muito importante se você quiser escrever uma função semelhante às instruções de montagem ror e rol (Girar na Direita e Girar na Esquerda), por causa do valor dword girando o binário sempre leva 32 posições e inclui os zeros de liderança Então, este é o caminho certo : Função rotativa (decimal. Bits) binário decbin (decimal) binário binário (binário 32. 0. STRPADLEFT) return (bindec (substr (bits binários). Substr (binário. 0. bits))) Veja este código de montagem : Mov edx, 1bf5616c ror edx, 8 Após esta operação: edx 0x6c1bf561 (binário: 1101100000110111111010101100001) Mas seu código retorna 0x0d9bf561 (binário: 1101100110111111010101100001) Para obter o valor certo, você deve adicionar os zeros avançados adicionando essa linha com o strpad () (Veja acima). Muito importante, achei a limitação de 31 bits nos bits do bit para ser um pouco frustrante em aplicativos de controle de permissão em grande escala. Eu tenho uma situação envolvendo acesso em nível de página com mais de 50 páginas. Eu consegui resolver a limitação adicionando um loop que largou 31 bits fora do direito até o bit do identificador de recurso estar dentro dos primeiros 31. ltphp userlevel session - gt userlevel - 0 a subtração garante o tipo int pgcode pow (2, (pgid - (1)) enquanto (pgcode gt 2147483648) pgcode pgcode pow (2. 31) sessão de nível de usuário - gt userlevel pow (2. 31) se ((userlevel - 0 ppc de amp)) se não autorizado, mostre o cabeçalho da página não autorizado (Local : Unauthorized. php) exit gt A seguinte função executará um deslocamento esquerdo de 32 bits em uma máquina de 64 bits: ltphp function leftshift32 (número. Etapas) binário decbin (número). Strrepeat (0. passos) bin binário (binário 32. 0. STRPADLEFT) bin binário (binário. Strlen (binário) - 32) retorno binário 1. - (Pow (2. 31) - bindec (substr (binário. 1) )). Bindec (binário) gt

Comments

Popular posts from this blog

Mover Média Circular Buffer

Binary Options Brokers Blacklist 2015

Free Forex Day Trading Strategy