Outras bases


native! to-hex

Converte um integer! em um hexadecimal ( issue! datatype) com um # e 0's na frente).


>> to-hex 10
== #0000000A

>> to-hex 16
== #00000010

>> to-hex 15
== #0000000F



/size        => Especifica o número de dígitos no resultado hexadecimal.


>> to-hex/size 15 4
== #000F

>> to-hex/size 10 2
== #0A



native!  enbase e native! debase,  

Estes são usados para codificar e decodificar strings codificadas em binário (binary -coded strings). Não é exatamente conversão de bases e, honestamente, eu não sei o uso disso, mas funciona assim:


>> enbase "my house"
== "bXkgaG91c2U="

>> probe to-string debase "bXkgaG91c2U="
"my house"
== "my house"

/base        => base binária utilizada. Pode ser 64 (default), 16 ou 2.

>> enbase/base "Hi" 2
== "0100100001101001"

>> probe to-string debase/base "0100100001101001" 2
"Hi"
== "Hi"

native! dehex

Converte URLs que usam caracteres codificados em hexadecimal (%xx).

>> dehex "www.mysite.com/this%20is%20my%20page"
== "www.mysite.com/this is my page" ; Hex 20 (%20) é espaço "  "

>> dehex "%33%44%55"
== "3DU"
; %33 é hex para "3", %44 é hex para "D" e %55 é hex para "U".

Funções de manipulação de bits (bitwise):

op! >>   Red-specs  Red-by-example

right shift - documentação diz: "os bits mais baixos são jogados fora e os mais altos duplicados".


>> 144 >> 2

== 36


Não consegui entender como duplicar o bit mais alto se for 1. Tentei usar palavras de 32 bits, mas o Red as converte para floats.

op! <<   Red-specs  Red-by-example

left shift - bits mais altos são jogados fora, bit zero e adicionado à direita.

>> 17 << 1

== 34


op! >>>  Red-specs  Red-by-example

logical shift -  bits mais baixos são jogados fora, zeros são adicionados à esquerda. Não entendo porque é diferente de  >>.


op! and  &  and~   Red-specs  Red-by-example

>> 27 and 50

== 18



0

0

0

1

1

0

1

1


27













0

0

1

1

0

0

1

0


50












and

0

0

0

1

0

0

1

0


18


A versão funcional (não infixa) de and é and~


op! or  &  or~   Red-specs  Red-by-example

>> 27 or 50

== 59



0

0

0

1

1

0

1

1


27













0

0

1

1

0

0

1

0


50












or

0

0

1

1

1

0

1

1


59


A versão funcional (não infixa) de or é or~


op! xor   xor~   Red-specs  Red-by-example

>> 27 xor 50

== 41



0

0

0

1

1

0

1

1


27













0

0

1

1

0

0

1

0


50












xor

0

0

1

0

1

0

0

1


41


A versão funcional (não infixa) de xor é xor~


action! complement   Red-specs  Red-by-example

a fazer -

a fazer