Perl Bitwise Operations
Perl Bitwise Operators
Foreword: In this tutorial I talk about the bitwise NOT operator, bitwise AND operator, bitwise OR operator and bitwise Exclusixe OR operator; I also talk about bitwise shift operators.
By: Chrysanthus Date Published: 26 Jul 2016
Introduction
Bitwise Logical Operators
Bitwise NOT Operator
The bitwise NOT operator is ~. The bitwise NOT of the byte,
01001101
is
10110010
Remember, 1 means true and 0 means false. The following code does this with the computer:
use strict;
my $byte8 = pack('B8', '01001101');
my $answer_byte = ~$byte8;
print unpack('B8', $answer_byte);
The input and output are byte strings.
Bitwise AND
The bitwise AND operator is &. The following is a manual bitwise AND operation:
00110110
01010100
--------
00010100
========
The following code does this with the computer:
use strict;
my $operandL = pack('B8', '00110110');
my $operandR = pack('B8', '01010100');
my $answer_byte = $operandL & $operandR;
print unpack('B8', $answer_byte);
Bitwise OR
The bitwise OR operator is |. The following is a manual bitwise OR operation:
10111010
00101001
--------
10111011
========
The following code does this with the computer:
use strict;
my $operandL = pack('B8', '10111010');
my $operandR = pack('B8', '00101001');
my $answer_byte = $operandL | $operandR;
print unpack('B8', $answer_byte);
Bitwise exclusive OR is OR where true OR true is false (the other OR actions remaining the same). The bitwise XOR operator is ^. The following is a manual bitwise XOR operation:
10111010
00101001
--------
10010011
========
The following code does this with the computer:
use strict;
my $operandL = pack('B8', '10111010');
my $operandR = pack('B8', '00101001');
my $answer_byte = $operandL ^ $operandR;
print unpack('B8', $answer_byte);
Bitwise Shift Operators
Left Shift Operator
The left shift operator is, <<. It shifts all the bits to the left, a number of places, adding corresponding number of zeroes to the right. It operates on integers (whole numbers). So you have to do some conversion. The syntax is:
operand << n
where n is the number of places to be shifted. The left shift of,
11101011
by 2 places is
10101100
discarding the extra result bits on the left. The following code does the above 2 place shifting, in the computer:
use strict;
my $operand_byte = pack('B8', '11101011');
my $operand_int = unpack('C', $operand_byte);
my $answer_int = $operand_int << 2;
my $answer_byte = pack('C', $answer_int);
print unpack('B8', $answer_byte);
The right shift operator is, >>. It shifts all the bits to the right, a number of places, adding corresponding number of zeroes to the left. It operates on integers (whole numbers). So you have to do some conversion. The syntax is:
operand >> n
where n is the number of places to be shifted. The right shift of,
11101011
by 2 places is
00111010
with the extra result bits on the right discarded.
The following code does the above 2 place shifting, in the computer:
use strict;
my $operand_byte = pack('B8', '11101011');
my $operand_int = unpack('C', $operand_byte);
my $answer_int = $operand_int >> 2;
my $answer_byte = pack('C', $answer_int);
print unpack('B8', $answer_byte);
That is it for this tutorial.
Chrys
Related Links
Internet Sockets and PerlPerl pack and unpack Functions
Writing MySQL Protocol Packets in PurePerl
Developing a PurePerl MySQL API
Using the PurePerl MySQL API
More Related Links
Perl Mailsend
PurePerl MySQL API
Perl Course - Professional and Advanced
Major in Website Design
Web Development Course
Producing a Pure Perl Library
MySQL Course