4D v16.3Operadores de bit |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Operadores de bit
|
Operaçãon | Operador | Sintaxis | Devolve | |
AND | & | I.longo & I.longo | I.longo | |
OR (inclusivo) | | | I.longo |I.longo | I.longo | |
OR (exclusivo) | ^| | I.longo ^| I.longo | I.longo | |
Left Bit Shift | << | I.longo << I.longo | I.longo | (ver nota 1) |
Right Bit Shift | >> | I.longo >> I.longo | I.longo | (ver nota 1) |
Bit Set | ?+ | I.longo ?+ I.longo | I.longo | (ver nota 2) |
Bit Clear | ?- | I.longo?- I.longo | I.longo | (ver nota 2) |
Bit Test | ?? | I.longo??I.longo | Booleano | (ver nota 2) |
Notas
(1) Nas operações utilizando Left Bit Shift e Right Bit Shift, o segundo operando indica o número de posições de bits que o primeiro operando se moverá no valor resultante. Portanto, este segundo operando deve estar entre 0 e 31. Note entretanto, que mover 0 devolve um valor sem mudança e mover mais de 31 bits devolve 0x00000000 porque todos os bits se perdem. Se passa outro valor como segundo operando, o resultado não é significativo.Operação | Descrição |
AND | Cada bit devolvido é o resultado da operação AND lógica aplicada aos dois operandos. Esta é a tabela de AND lógica: |
1 & 1 --> 1 | |
0 & 1 --> 0 | |
1 & 0 --> 0 | |
0 & 0 --> 0 | |
Em outras palavras, o bit resultante é 1 se os dois bits operandos valem 1; do contrário o bit resultante é 0. | |
OR (inclusive) | Cada bit resultante é o resultado da operação OR inclusive lógico aplicado aos bits nos dois operandos. Esta é a tabela do OR inclusive lógico: |
1 | 1 --> 1 | |
0 | 1 --> 1 | |
1 | 0 --> 1 | |
0 | 0 --> 0 | |
Em outras palavras, o bit resultante é 1 se ao menos um dos dois bits operandos é 1; do contrário o bit resultante é 0. | |
O (exclusivo) | Cada bit devolvido é o resultado da operação. Em outras palavras XOR exclusivo lógico aplicado aos dois bits operandos. Esta é a tabela do XOR exclusivo lógico: |
1 ^| 1 --> 0 | |
0 ^| 1 --> 1 | |
1 ^| 0 --> 1 | |
0 ^| 0 --> 0 | |
Em outras palavras, o bit resultante é 1 se só um dos dois bits operandos é 1; do contrário o bit resultante é 0. | |
Left Bit Shift | O valor devolvido é definido para o valor do primeiro operando, logo os bits resultantes se movem a esquerda o número de posições indicadas pelo segundo operando. Os bits à esquerda se perdem e os novos bits a direita tomam o valor 0. |
Nota: considerando os valores positivos, movendo à esquerda N bits é o mesmo que multiplicar por 2^N. | |
Right Bit Shift | O valor resultante se atribui ao primeiro operando, logo os bits resultantes são movidos a direita o número de posição indicada pelo segundo operando. Os bits a direita são perdidos e os novos bits a esquerda tomam o valor 0. |
Nota: considerando só os valores positivos, mover a direita N bits é o mesmo que dividir por 2^N. | |
Bit Set | O valor resultante é definido pelo primeiro valor de operando, logo o bit resultante, cujo número se indica pelo segundo operando, toma o valor 1. Os outros bits não mudam. |
Bit Clear | O valor devolvido é definido para o valor do primeiro operando, logo o bit resultante, cujo número é indicado pelo segundo operando, toma o valor 0. Os outros bits não mudam. |
Bit Test | Devolvem True se, no primeiro operando, o bit cujo número é indicado pelo segundo operando for igual a 1. Devolve Falso se, no primeiro operando, o bit cujo número se indica pelo segundo operando for igual a 0. |
(1) A tabela a seguir dá um exemplo de cada operador de bits:
Operação | Exemplo | Resultado |
Bitwise AND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 |
Bitwise OR (inclusivo) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF |
Bitwise OR (exclusivo) | 0x0000FFFF ^| 0xFF00FF00 | 0xFF0000FF |
Left Bit Shift | 0x0000FFFF << 8 | 0x00FFFF00 |
Right Bit Shift | 0x0000FFFF >> 8 | 0x000000FF |
Bit Set | 0x00000000 ?+ 16 | 0x00010000 |
Bit Clear | 0x00010000 ?- 16 | 0x00000000 |
Bit Test | 0x00010000 ?? 16 | True |
Constante | Tipo | Valor |
Changed resource bit | Inteiro longo | 1 |
Preloaded resource bit | Inteiro longo | 2 |
Changed resource mask | Inteiro longo | 2 |
Protected resource bit | Inteiro longo | 3 |
Locked resource bit | Inteiro longo | 4 |
Preloaded resource mask | Inteiro longo | 4 |
Purgeable resource bit | Inteiro longo | 5 |
System heap resource bit | Inteiro longo | 6 |
Protected resource mask | Inteiro longo | 8 |
Locked resource mask | Inteiro longo | 16 |
Purgeable resource mask | Inteiro longo | 32 |
System heap resource mask | Inteiro longo | 64 |
Estas constantes permitem provar o valor devolvido por Get resource properties ou criar o valor a passar a SET RESOURCE PROPERTIES. As constantes cujo nome termina em “bit” dão a posição do bit que quer provar, apagar, ou definir. As constantes cujo nome termina em “mask” dão um valor de tipo Inteiro longo onde só o bit (que quer provar, apagar ou asignar) é igual a um.
Por exemplo, para provar se um recurso (cujas propriedades foram armazenadas na variável $vlResAttr) são purgáveis ou não, pode escrever:
If($vlResAttr ?? Purgeable resource bit) ` O recurso é purgável?
ou:
If(($vlResAttr & Purgeable resource mask)#0)O recurso é purgável?
Ao contrário, pode utilizar estas constantes para definir o mesmo bit. Pode escrever:
$vlResAttr:=$vlResAttr ?+Purgeable resource bit
ou:
$vlResAttr:=$vlResAttr |Purgeable resource bit
(3) Este exemplo armazena dois valores Inteiros em um valor Inteiro longo. Pode escrever:
$vlLong:=($viIntA<<16)|$viIntB ` Armazenar dois Inteiros em um Inteiro longo
$vlIntA:=$vlLong>>16 ` Extrair o inteiro armazenado em high-word
$viIntB:=$vlLong & 0xFFFF ` Extrair o inteiro armazenado em low-word
Operadores
Operadores de Cadeia
Operadores de Comparação
Operadores de data
Operadores de Hora
Operadores de Imagem
Operadores Lógicos
Operadores Numéricos
Produto: 4D
Tema: Operadores
Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)