in reply to Re: decimal to binary conversion
in thread decimal to binary conversion

What is the reason for the n <=> 0 comparison?


Give a man a fish:  <%-(-(-(-<

Replies are listed 'Best First'.
Re^3: decimal to binary conversion
by Hosen1989 (Scribe) on Jun 05, 2015 at 08:02 UTC

    The usage for <=> here in the masking expreasion ($decimal & 0x80) is to test if this 8th bit is zero or one, also you can do it like:

    #!/usr/bin/perl -w use strict; use warnings; print "Enter decimal number less than 256:"; my $decimal; $decimal=<STDIN>; chomp $decimal; # $decimal += 0; print (($decimal & 0x80)? (1) : (0) ); # to test the 8th bit print (($decimal & 0x40)? (1) : (0) ); # to test the 7th bit print (($decimal & 0x20)? (1) : (0) ); # to test the 6th bit print (($decimal & 0x10)? (1) : (0) ); # to test the 5th bit print (($decimal & 0x08)? (1) : (0) ); # to test the 4th bit print (($decimal & 0x04)? (1) : (0) ); # to test the 3th bit print (($decimal & 0x02)? (1) : (0) ); # to test the 2nd bit print (($decimal & 0x01)? (1) : (0) ); # to test the 1st bit

      Are so many parentheses needed with the lower precedence  ? : Conditional Operator? Also, rather than using what looks like an unrolled loop for printing bits, is there any way to use a while- or for-loop here?


      Give a man a fish:  <%-(-(-(-<

        Yes, you can drop all the parens when you switch to the ternary operator. And yes, it can be done as a loop, which also removes the 8-bit restriction:

        $ cat 1129169.pl #!/usr/bin/env perl use 5.010; use strict; use warnings; sub dec_to_bin { my $dec = shift; print "$dec : "; unless( $dec =~ /^\d+$/ ){ say "Not a whole number!"; return; } my $x = 1; my $bin = ''; while(1){ my $bit = $dec & $x; $bin = ($bit ? 1 : 0) . $bin; $dec -= $bit; last unless $dec; $x <<= 1; } say $bin; } dec_to_bin($_) for @ARGV; $ perl 1129169.pl 0 1 4 255 65536 abc 0 : 0 1 : 1 4 : 100 255 : 11111111 65536 : 10000000000000000 abc : Not a decimal number!

        Aaron B.
        Available for small or large Perl jobs and *nix system administration; see my home node.