如何使用 Perl 在文件中打印最低有效的 4 位有符号整数?
How to print least significant 4 bits of signed integer in a file using Perl?
例如:
我有$a= -1
。如果我使用 printf
和 %.4b
或 %b
打印它,它会给我 32-bit
全 1。
但是,我只想打印二进制文件中的最低有效 4 位,如 1111
。
有什么想法吗?
谢谢
-1
在二进制中是用2s的补码表示的,所以是所有的1
。 (查看更多:What is “2's Complement”?)
如果你想'limit'它,那么你可以这样做的方法是按位and
。
开启 4 位是
1+2+4+8 = 15.
因此:
use strict;
use warnings;
my $val = -1;
printf ( "%b", $val & 15 );
%.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
例如:
我有$a= -1
。如果我使用 printf
和 %.4b
或 %b
打印它,它会给我 32-bit
全 1。
但是,我只想打印二进制文件中的最低有效 4 位,如 1111
。
有什么想法吗?
谢谢
-1
在二进制中是用2s的补码表示的,所以是所有的1
。 (查看更多:What is “2's Complement”?)
如果你想'limit'它,那么你可以这样做的方法是按位and
。
开启 4 位是
1+2+4+8 = 15.
因此:
use strict;
use warnings;
my $val = -1;
printf ( "%b", $val & 15 );
%.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