more useful options PerlMonks

### Comment on

 Need Help??

Here is how it works and some example of how you use AND & OR | and XOR ^ with bit masks. AND is true is both bits AND-ED together are true, otherwise it is false. OR is true if either of the bits OR-ED together are true otherwise it is false. XOR (Exclusive OR )is true if only one of bits XOR-ED together is true. It is false if both bits are true or both bits are false. Although XOR might seem a little odd it has some particularly interesting properties.

```print "Basic binary key bit numbers\n";
print "\$_\t", dec_to_bin_text(\$_), "\n" for qw ( 0 1 2 4 8 16 32 64 12
+8 255 );
print "\$_\t", dec_to_bin_text(\$_), "\n" for qw ( 255 254 252 248 240 2
+24 192 128 0);

print "\nWhat binary OR does - the | operator\n";
print do_or( 255, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );
print do_or( 0, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );

print "\nWhat binary AND does - the & operator\n";
print do_and( 255, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );
print do_and( 0, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );

print "\nWhat binary XOR does - the ^ operator\n";
print do_xor( 255, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );
print do_xor( 0, \$_ ) for qw( 0 1 2 4 8 16 32 64 128 255 );

print "\nUsing OR to set a bit in a bit mask to true\n";
print do_or( 0, 64 );
print do_or( 128, 64 );
print do_or( 255, 64 );

print "\nUsing XOR and AND to set a bit in a bit mask for false\n";
print "We want to set the 64 bit 0100000 and use the 255 XOR 64\n";
print "Which is 10111111 = 191 as a mask to do this\n";
print do_and( 255, 255^64 );
print do_and( 0, 255^64 );

print "\nUsing AND to get the value of a bit in a bit mask ( res = zer
+o if not set, >0 if set )\n";
print do_and( 0, 64);
print do_and( 255, 64);

print "\nThe interesting property of double XOR against a bit mask - b
+it fliping\n";
print "This can be the basis or a simple encryption routine as in Acti
+ve State Perl App\n";
print "\nExample 1\n";
print do_xor( 255, 10 );
print do_xor( 255, 245 );
print "\nExample 2\n";
print do_xor( 123, 10 );
print do_xor( 123, 113 );

print "\n\nThere you go!\n";

sub do_or {
my ( \$b1, \$b2 ) = @_;
my \$res = \$b1 | \$b2;
\$b1_txt = dec_to_bin_text(\$b1);
\$b2_txt = dec_to_bin_text(\$b2);
\$res_txt = dec_to_bin_text(\$res);
return "
\$b1_txt = \$b1
\$b2_txt = \$b2
---OR---
\$res_txt = \$res
";
}

sub do_xor {
my ( \$b1, \$b2 ) = @_;
my \$res = \$b1 ^ \$b2;
\$b1_txt = dec_to_bin_text(\$b1);
\$b2_txt = dec_to_bin_text(\$b2);
\$res_txt = dec_to_bin_text(\$res);
return "
\$b1_txt = \$b1
\$b2_txt = \$b2
--XOR---
\$res_txt = \$res
";
}

sub do_and {
my ( \$b1, \$b2 ) = @_;
my \$res = \$b1 & \$b2;
\$b1_txt = dec_to_bin_text(\$b1);
\$b2_txt = dec_to_bin_text(\$b2);
\$res_txt = dec_to_bin_text(\$res);
return "
\$b1_txt = \$b1
\$b2_txt = \$b2
--AND---
\$res_txt = \$res
";
}

sub dec_to_bin_text {
my \$dec = shift;
my \$bin_str = sprintf "%08b", \$dec;
return \$bin_str;
}

__DATA__
Basic binary key bit numbers
0    00000000
1    00000001
2    00000010
4    00000100
8    00001000
16    00010000
32    00100000
64    01000000
128    10000000
255    11111111

255    11111111
254    11111110
252    11111100
248    11111000
240    11110000
224    11100000
192    11000000
128    10000000
0    00000000

What binary OR does - the | operator

11111111 = 255
00000000 = 0
---OR---
11111111 = 255

11111111 = 255
00000001 = 1
---OR---
11111111 = 255

11111111 = 255
00000010 = 2
---OR---
11111111 = 255

11111111 = 255
00000100 = 4
---OR---
11111111 = 255

11111111 = 255
00001000 = 8
---OR---
11111111 = 255

11111111 = 255
00010000 = 16
---OR---
11111111 = 255

11111111 = 255
00100000 = 32
---OR---
11111111 = 255

11111111 = 255
01000000 = 64
---OR---
11111111 = 255

11111111 = 255
10000000 = 128
---OR---
11111111 = 255

11111111 = 255
11111111 = 255
---OR---
11111111 = 255

00000000 = 0
00000000 = 0
---OR---
00000000 = 0

00000000 = 0
00000001 = 1
---OR---
00000001 = 1

00000000 = 0
00000010 = 2
---OR---
00000010 = 2

00000000 = 0
00000100 = 4
---OR---
00000100 = 4

00000000 = 0
00001000 = 8
---OR---
00001000 = 8

00000000 = 0
00010000 = 16
---OR---
00010000 = 16

00000000 = 0
00100000 = 32
---OR---
00100000 = 32

00000000 = 0
01000000 = 64
---OR---
01000000 = 64

00000000 = 0
10000000 = 128
---OR---
10000000 = 128

00000000 = 0
11111111 = 255
---OR---
11111111 = 255

What binary AND does - the & operator

11111111 = 255
00000000 = 0
--AND---
00000000 = 0

11111111 = 255
00000001 = 1
--AND---
00000001 = 1

11111111 = 255
00000010 = 2
--AND---
00000010 = 2

11111111 = 255
00000100 = 4
--AND---
00000100 = 4

11111111 = 255
00001000 = 8
--AND---
00001000 = 8

11111111 = 255
00010000 = 16
--AND---
00010000 = 16

11111111 = 255
00100000 = 32
--AND---
00100000 = 32

11111111 = 255
01000000 = 64
--AND---
01000000 = 64

11111111 = 255
10000000 = 128
--AND---
10000000 = 128

11111111 = 255
11111111 = 255
--AND---
11111111 = 255

00000000 = 0
00000000 = 0
--AND---
00000000 = 0

00000000 = 0
00000001 = 1
--AND---
00000000 = 0

00000000 = 0
00000010 = 2
--AND---
00000000 = 0

00000000 = 0
00000100 = 4
--AND---
00000000 = 0

00000000 = 0
00001000 = 8
--AND---
00000000 = 0

00000000 = 0
00010000 = 16
--AND---
00000000 = 0

00000000 = 0
00100000 = 32
--AND---
00000000 = 0

00000000 = 0
01000000 = 64
--AND---
00000000 = 0

00000000 = 0
10000000 = 128
--AND---
00000000 = 0

00000000 = 0
11111111 = 255
--AND---
00000000 = 0

What binary XOR does - the ^ operator

11111111 = 255
00000000 = 0
--XOR---
11111111 = 255

11111111 = 255
00000001 = 1
--XOR---
11111110 = 254

11111111 = 255
00000010 = 2
--XOR---
11111101 = 253

11111111 = 255
00000100 = 4
--XOR---
11111011 = 251

11111111 = 255
00001000 = 8
--XOR---
11110111 = 247

11111111 = 255
00010000 = 16
--XOR---
11101111 = 239

11111111 = 255
00100000 = 32
--XOR---
11011111 = 223

11111111 = 255
01000000 = 64
--XOR---
10111111 = 191

11111111 = 255
10000000 = 128
--XOR---
01111111 = 127

11111111 = 255
11111111 = 255
--XOR---
00000000 = 0

00000000 = 0
00000000 = 0
--XOR---
00000000 = 0

00000000 = 0
00000001 = 1
--XOR---
00000001 = 1

00000000 = 0
00000010 = 2
--XOR---
00000010 = 2

00000000 = 0
00000100 = 4
--XOR---
00000100 = 4

00000000 = 0
00001000 = 8
--XOR---
00001000 = 8

00000000 = 0
00010000 = 16
--XOR---
00010000 = 16

00000000 = 0
00100000 = 32
--XOR---
00100000 = 32

00000000 = 0
01000000 = 64
--XOR---
01000000 = 64

00000000 = 0
10000000 = 128
--XOR---
10000000 = 128

00000000 = 0
11111111 = 255
--XOR---
11111111 = 255

Using OR to set a bit in a bit mask to true

00000000 = 0
01000000 = 64
---OR---
01000000 = 64

10000000 = 128
01000000 = 64
---OR---
11000000 = 192

11111111 = 255
01000000 = 64
---OR---
11111111 = 255

Using XOR and AND to set a bit in a bit mask for false
We want to set the 64 bit 0100000 and use the 255 XOR 64
Which is 10111111 = 191 as a mask to do this

11111111 = 255
10111111 = 191
--AND---
10111111 = 191

00000000 = 0
10111111 = 191
--AND---
00000000 = 0

Using AND to get the value of a bit in a bit mask ( res = zero if not
+set, >0 if set )

00000000 = 0
01000000 = 64
--AND---
00000000 = 0

11111111 = 255
01000000 = 64
--AND---
01000000 = 64

The interesting property of double XOR against a bit mask - bit flipin
+g
This can be the basis or a simple encryption routine as in Active Stat
+e Perl App

Example 1

11111111 = 255
00001010 = 10
--XOR---
11110101 = 245

11111111 = 255
11110101 = 245
--XOR---
00001010 = 10

Example 2

01111011 = 123
00001010 = 10
--XOR---
01110001 = 113

01111011 = 123
01110001 = 113
--XOR---
00001010 = 10

There you go!

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"\$'\$`\$\"\$\&"&ee&&y&srve&&d&&print

In reply to Re: Re: What A Wonderful World: Bitmasks! by tachyon

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

• Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
• Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
• Read Where should I post X? if you're not absolutely sure you're posting in the right place.
• Posts may use any of the Perl Monks Approved HTML tags:
a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
• You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
 For: Use: & & < < > > [ [ ] ]
• Link using PerlMonks shortcuts! What shortcuts can I use for linking?

Create A New User
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2018-03-20 16:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When I think of a mole I think of:

Results (255 votes). Check out past polls.

Notices?