2015-04-02 1 views
0

Например:Как печатать наименее значимые 4 бита целого числа со знаком в файле с использованием Perl?

У меня есть $a= -1. Если я распечатаю его, используя printf с %.4b или %b, он дает мне 32-bit все 1's.

Но, я хочу только напечатать наименее значимые 4 бита, такие как 1111 в файле в двоичном формате. Любые идеи, как это сделать?

Благодаря

ответ

0

-1 в двоичной системе представлена ​​через 2s дополнения, так что является все 1 s. (См. Здесь для получения дополнительной информации: What is “2's Complement”?)

Если вы хотите «ограничить» его, то способ, которым вы можете это сделать, с поразным and.

Включение 4 бит

1+2+4+8 = 15. 

Поэтому:

use strict; 
use warnings; 

my $val = -1; 

printf ("%b", $val & 15); 
0

%.4b относится к дробным цифрам, %04b форматов, по крайней мере, 4 цифры, обивка ведущей 0 сек по мере необходимости.

Чтобы удовлетворить отрицательные целые числа, возьмите модуль на 16 (2^<number of least significant bits>).

my @b = (12, 59, -1, 1); # sample of integers 
@b = map { $_ % 16; } @b; # take modulus 
printf ("4-bits: %04b" . (", %04b" x $#b) . ";\n", @b); 
          # output with computed number of placeholders