[Tutorial] Bit32 |
Squalleze « Citoyen » 1464292800000
| 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bit32 bit32 arshift band & bnot ~ bor | btest bxor ~ extract replace lrotate lshift << rrotate rshift >> bit32, é uma biblioteca que trabalha com a manipulação de bits, todas suas funções aceitam apenas números inteiros. E como sei que alguem vai pensar isso, já vou respondendo, não, não faz diferença seu PC ser 64bits, e também não existe a biblioteca bit64... não em Lua... Ps.: todos os zeros do lado esquerdo dos binários não possuem importância, é apenas para facílitar o entendimento. Não confunda & com and e | com or Tópico criado porque meu amigu Bolodefchoco me obrigou a ensinar ele como isso funfa, e eu fiz com muito amor <1/0 -q, e porque parece que tem gente que não sabe que essa biblioteca existe ^-^ AND, & Lua 5.2: bit32.band(...) Lua 5.3: x & y Essa é uma das funções mais simples, pense o seguinte, um número em binário é composto por uns (1, true) e zeros (0, false), e você possui dois ou mais, então ele irá "checar" o binário de ambos, exemplo: 78 = 01001110 54 = 00110110 então...
Ou seja, ele pega o mesmo bit de cada número e com um and verifica qual vai ser o valor do mesmo bit no novo valor. OR, | Lua 5.2: bit32.bor(...) Lua 5.3: x | y Muito semelhante ao &, and, porém utiliza um or como condição, exemplo: 78 = 01001110 54 = 00110110 então...
NOT, ~ Lua 5.2: bit32.bnot(x) Lua 5.3: ~x Essa função/operador funciona de uma maneira um pouco inusitada, exemplo:
Fórmula: ~x = (-1 - x) % 2 ^ 32 Resumindo, ele inverte o operador do número, subitrai 1 e retorna o resto de sua divisão por 2³² (4.294.967.296) que é o valor máximo armazenado em 32bits XOR, ~ Lua 5.2: bit32.bxor(...) Lua 5.3: x ~ y Primeiramente, vou resumir o XOR, Xor significa eXclusive Or ou eXclusive disjunction e é um operador lógico que só retorna true se ambos os valores forem diferentes, em maioria das línguagens de programação, seu operador é o ^ porém como ele já existe em Lua, o operador ~ é utilizado, exemplo:
então...
Shift, <<, >> Lua 5.2: bit32.lshift(x, tamanho) Lua 5.3: x << tamanho Lua 5.2: bit32.rshift(x, tamanho) Lua 5.3: x >> tamanho Lua 5.2: bit32.arshift(x, tamanho) Como o próprio nome já diz, essas funções/operadores empurram os bits por um determinado tamanho, diferente do rotate eles não reaparecem no lado oposto, e sim são "eliminados" caso ultrapassem a casa dos 32bits. Shift Left
Shift Right
arshift faz o mesmo que os outros, porém se o número for positivo é para a direita, e negativo para a esquerda... Test Lua 5.2: bit32.btest(...) Essa função irá retornar true se o output de bit32.band(...) for diferente de 0. bit32.btest(...) = (bit32.band(...) ~= 0) Extract Lua 5.2: bit32.extract(x, inicio[, tamanho = 1]) O atributo inicio é um número entre 0 e 31, e tamanho por padrão é 1, porém deve ser um número entre 1 e 32 - inicio. Funciona semelhante a um string.sub, porém de binário é claro... Por exemplo, você tem o número 9213, seu binário é 10001111111101, então:
Replace Lua 5.2: bit32.replace(x, y, inicio[, tamanho]) Esse funciona muito semelhante ao extract, só que ao contrário, pense assim, você tem uma palavra, e você quer colocar dentro dela uma outra palavra, é exatamente isso! Você só precisa determinar onde essa palavra entra e o tamanho que ela vai ocupar, simples! Porém no caso são bits obviamente... Exemplos: 9213 = 00000000000000000010001111111101 4294967295 = 11111111111111111111111111111111 (escolhi esse para ficar melhor de entender) █ = área substituida █ = área "pega" do valor que substituirá a área vermelha █ = área intacta █ = área não pega do valor dado bit32.replace(4294967295, 9213, 0, 8) = 4294967293
bit32.replace(9213, 100, 6, 26) = 6461
bit32.replace(100, 9213, 15, 3) = 163940
bit32.replace(0, 4294967295, 10, 8)= 261120
Rotate Lua 5.2: bit32.lrotate(x, tamanho) Lua 5.2: bit32.rrotate(x, tamanho) O atributo tamanho será modulado? por 32 (tamanho % 32) Um pouco complicado de se explicar, porém imagine uma roda, nela estão grifados todos os bits (do lado dela, não dentro), quando você gira essa roda 5 bits sentido horário a ordem se mantem, porém os útimos 5 bits passam a ser os primeiros, e se você girar no sentido contrário, eles voltam a sua posição, é meio que isso... Se tamanho for negativo funcionará como um rrotate em lrotate e como lrotate em rrotate No caso o número é 9213 e seu binário é 10001111111101, exemplo: Left Rotate
Right Rotate
Dernière modification le 1464993240000 |
Hydroper « Citoyen » 1471014720000
| 0 | ||
Eu tinha precisado desse tópico ontem e-e |
Bolodefchoco « Sénateur » 1515095100000
| 0 | ||
this thread shall not die Nunca encontrei funcionalidade pra isso no transformice :_: Nunca vi um tópico com tanto 0, 1 e beleza ao mesmo tempo |
Squalleze « Citoyen » 1515454800000
| 0 | ||
eu q fiz o tópico e ele tá super confuso, além de quem na época eu n sabia direito o bnot então provavelmente irei arrumar |
Mescouleur « Citoyen » 1517027220000
| 0 | ||
mas meu pc é 64bits, vai funcionar msm assim? |
Cherry_sweet « Citoyen » 1517030940000
| 0 | ||
Mescouleur a dit : eu ia fazer essa piada aff legal seu topico <3 |
Bortverde « Consul » 1517055180000
| 0 | ||
Que doideira E qual a utilidade disso? Quem diria que teria esse tipo de coisa no TFM, já que ele usa Lua |
Laagaadoo « Citoyen » 1517067420000
| 0 | ||
Bortverde a dit : Você pode por exemplo fazer um sistema de permissões: Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 local kick = 0x1 |
Bolodefchoco « Sénateur » 1534011540000
| 2 | ||
Algumas fórmulas legais de saber: lshift(x, y) = x * (2 ^ y) rshift(x, y) = x / (2 ^ y) Soma pode ser bor(x, y), ou x+y se ambos forem potencias de 10 Subtração é band(x, bnot(y)), ou x & ~y Lindo do laag pr0 Dernière modification le 1534012860000 |
Feiticeirobr « Censeur » 1534014900000
| 0 | ||
Pensei que era alguma coisa do pc skdfjhjksdfh |
0 | ||
Belo tópico! |