我需要澄清我遇到的问题。我目前正在尝试使用Perl网站“Learn Perl”部分提供的Beginning Perl书来学习Perl。我已经到了第2章的结尾,我目前正在努力理解本书提供的解决方案背后的逻辑。
#!usr/bin/perl
#Ex2_3.plx
use warnings;
print "Please enter the value(less than 256) you wish to be converted into binary\n";
my $bin = <STDIN>;
chomp ($bin);
print "The binary value of $bin is : ", "\n";
#Use the bitwise and operator to determine the binary value:
print((128 & $bin) / 128);
print((64 & $bin) / 64);
print((32 & $bin) / 32);
print((16 & $bin) / 16);
print((8 & $bin) / 8);
print((4 & $bin) / 4);
print((2 & $bin) / 2);
print((1 & $bin) / 1);
print("\n");
我似乎无法理解背后的逻辑(128&amp; n)/ 128等等。 虽然我明白为什么代码需要从128下降到1我似乎无法掌握&amp;之后的解决方案。我感觉很糟糕,因为我通常讨厌看解决方案,但这对我来说非常有趣,大多数其他编程书籍对按位运算符的关注非常小(如果有的话)。 我将非常感谢你的帮助。
答案 0 :(得分:2)
例如,十进制128是二进制的10000000
。 &
用这个给你最重要的一点。 / 128
部分与向右移位7次相同,因为将数字除以2与向右移位一位相同。
10000000 (= 128)
& 10000110 (= 134)
10000000
向右移动7位,得到1
现在,为64
做同样的事情 01000000 (= 64)
& 10000110 (= 134)
00000000
向右移6位(因为64 = 2 ^ 6),得到0
对其余位执行此操作,您将获得1
,0
,0
,0
,0
,1
,1
,0
,从10000110
语句中看print
。
本书中的代码与此基本相同:
#!/usr/bin/perl
use strict;
use warnings;
chomp(my $input = <STDIN>);
for (my $i = 7; $i >= 0; $i--) {
print( (($input & (1 << $i)) >> $i) );
}
print "\n";
答案 1 :(得分:1)