Este exemplo ilustra o uso de operadores aritméticos e bitwise (bit a bit).
- Design-time:
#solicita 2 números e realiza operações aritméticas e bit a bit
print "Informe o primeiro número: ";
chomp($n1 = <STDIN>);
print "Informe o segundo número: ";
chomp($n2 = <STDIN>);
print "\n\t\tOPERAÇÕES ARITMÉTICAS\n\n";
print "Soma \t\t $n1 + $n2 = ", $n1 + $n2, "\n";
print "Diferença \t $n1 - $n2 = ", $n1 - $n2, "\n";
print "Produto \t $n1 x $n2 = ", $n1 * $n2, "\n";
print "Potência \t $n1 ^ $n2 = ", $n1 ** $n2, "\n";
if($n2 != 0){
print "Divisão \t $n1 / $n2 = ", $n1 / $n2, "\n";
print "Quociente \t $n1 \\ $n2 = ", int($n1 / $n2), "\n";
print "Resto \t\t $n1 % $n2 = ", $n1 % $n2, "\n";
print "Raiz \t\t $n1 ^ (1 / $n2) = ", $n1 ** (1 / $n2), "\n";
}
print "\n\t\tOPERAÇÕES BIT A BIT\n\n";
$n1 += 0;
$n2 += 0;
print "And \t\t $n1 & $n2 = ", $n1 & $n2, "\n";
print "Or \t\t $n1 | $n2 = ", $n1 | $n2, "\n";
print "Xor \t\t $n1 ^ $n2 = ", $n1 ^ $n2, "\n";
print "Shift right \t $n1 >> 1 = ", $n1 >> 1, "\n";
print "\t\t $n2 >> 1 = ", $n2 >> 1, "\n";
print "Shift left \t $n1 << 1 = ", $n1 << 1, "\n";
print "\t\t $n2 << 1 = ", $n2 << 1, "\n";
print "Not \t\t ~$n1 = ", ~$n1, "\n";
print "\t\t ~$n2 = ", ~$n2, "\n\n";
- Runtime:
- Sintaxe:
A primeira novidade aqui pode ser vista nas linhas 4 e 6. Para se obter a entrada do usuário via teclado, usa-se STDIN, que significa standard input e pode ser escrito em caixa baixa ou minúsculas, dentro do operador diamond ou spaceship <> da seguinte forma:
$nome_da_variável = <stdin>;
Em seguida, para se retirar o caráter de nova linha (tecla ENTER), usa-se a função chomp com ou sem os parênteses:
chomp $nome_da_variável;
Nas linhas mencionadas, optamos por compactar as duas instruções em uma apenas:
chomp ($nome_da_variável = <STDIN>);
Observe na linha 7 e nas seguintes contendo a função print o uso do caráter ou código especial, também conhecido por escape sequence, de nova linha, \n, e também daquele de tabulação horizontal, \t.
O operador de multiplicação (linha 11) não é X (xis, vezes), mas sim * (asterisco).
O operador de potenciação (linhas 12 e 18) não é ^ (circunflexo), mas sim ** (asterisco duplo). Veja mais adiante (linha 27) que o circunflexo é o operador bitwise xor (exclusive or, exclusivo ou).
Não há propriamente um operador para se obter o quociente inteiro, mas isto foi feito com a função int aplicada à divisão. Observe também nesta linha 16 a escape sequence para a barra invertida, \\.
A radiciação (linha 18) é obtida ao se elevar o primeiro valor (base) ao expoente que é o inverso do segundo valor. Se este segundo valor for 2, então temos a raiz quadrada.
As linhas 22 e 23 garantem que Perl considere as entradas do usuário como números, somando-as a zero. Perl trata os caracteres alfanuméricos, dígitos e letras, como variáveis escalares, sem muita distinção.
Observe que para não repetir a variável foi usado o operador aritmético de atribuição += por causa da seguinte equivalência entre
operando operador= expressão;
e
operando = operando operador expressão;
Neste caso, o operando é $n1 ou $n2, o operador é +, e a expressão é 0.
As linhas 28-31 apresentam os operadores bitwise shift right e shift left, deslocamento à direita e à esquerda. O valor do deslocamento (offset) usado foi 1, mas poderia ser outro, inclusive um dos valores informados – neste exemplo, 5 e 3.
- Reflexão:
Viver é fazer escolhas. Há escolhas que são conscientes, que dependem da nossa vontade e decisão. Outras são inconscientes, alheias à nossa vontade e decisão. Sabe diferenciar entre as escolhas que você faz de forma ativa e aquelas que são feitas de forma passiva, por você ou para você? Gostar, por exemplo, é você mesmo ou mesma que escolhe? Você escolhe seu rumo ou deixa a vida te levar?