shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Operação Bitwise em Bash


From: Alfredo Casanova
Subject: Re: [shell-script] Re: Operação Bitwise em Bash
Date: Wed, 16 Oct 2019 22:15:39 -0300

Eu conhecia essa construção de explicitar a base, mas tinha certeza que se eu fizesse 2#00001010 ele converteria pra decimal no output, por isso nem tentei!

De toda forma, valeu a aula!

Em qua, 16 de out de 2019 19:52, Arkanon address@hidden [shell-script] <address@hidden> escreveu:
 

O bash considera números iniciando com 0 como na base octal:
$  echo $(( 01010 & 01010 ))
520

Se não começar com 0, considerará na base decimal:
$  echo $(( 1010 & 1010 ))
1010

Você pode indicar a base explicitamente:
$  echo $(( 8#1010 & 8#1010 ))
520
$  echo $(( 10#01010 & 10#01010 ))
1010

Portanto, se quer que seja considerada a base binária, indique-a:
$  echo $(( 2#00001010 & 2#00001010 ))
10
$  echo $(( 2#1010 & 2#1010 ))
10

Aliás, a base hexadecimal também tem sua sintaxe específica:
$  echo $(( 0x01010 & 0x01010 ))
4112
$  echo $(( 16#01010 & 16#01010 ))
4112

Observe que o resultado é dado na base decimal. Se quiser o resultado na mesma base de entrada, pode convertê-lo. Aqui tem algumas sugestões de procedimento:

$ dec=844
$ printf '%x\n' $dec # para hexadecimal
34c
$ printf '%X\n' $dec
34C
$ printf '%o\n' $dec # para octal
1514
$ bc <<< "obase=2;$dec" # para binario
1101001100  $ dec=844
$ bc <<< "obase=21;$dec" # para base 21 -> QUALQUER BASE
01 19 04

Att,

Em qua, 16 de out de 2019 às 19:25, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
 

Pelo visto ele está fazendo bitwise comparando 1.100 com 1.010.

Como fugir disso?


Em qua, 16 de out de 2019 19:07, Alfredo Casanova <address@hidden> escreveu:
Galera, to fazendo um script aqui pra detectar se uma sub-rede menos abrangente está compreendida dentro de outra mais abrangente (exemplo: saber se a rede 10.100.100.128/25 está dentro da rede 10.100.100.0/24)

E aí no meio das operacoes de bitwise me peguei com um erro que nao consigo explicar:

$ echo $(( 11111111 & 11111111))
11111111
$ echo $(( 11111111 & 11111110))
11111110

Essas duas operações estão com comportamento adequado
Porém:

$ echo $(( 00001010 & 00001010 ))
520
$ echo $(( 00001010 & 00001100 ))
512

eu não faço ideia do q está acontecendo nesses casos.
Alguém ilumina?

--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619



--
(o_  @arkanon  (Twitter)     __o
//\   address@hidden   _`\<,
V_/_      www.lsd.org.br  (_)/(_)
---------------------------------


reply via email to

[Prev in Thread] Current Thread [Next in Thread]