When you use a value in your database or application, the
value must be stored somewhere in the computer memory using a certain amount of space.
As we review in our study of bytes and
words, a value occupies space that resembles a group of small boxes. In
our human understanding, it is not always easy to figure out how a letter
such as as B is stored in 7 seven small boxes when we know that B is only
one letter.
Bit manipulation or a bit related operation allows you to control how
values are stored in bits. This is not an operation you will need to
perform very often, especially not in the early stages of your database. Nevertheless, bit operations (and related overloaded operators)
are present in all or most programming environments, so much
that you should be aware of what they do or what they offer.
Bits Operators: The Bitwise NOT Operator ~ |
|
One of the operations you can perform on a bit
consists of reversing its value. That is, if a bit holds a value of 1, you
may want to change it to 0 and vice-versa. This operation can be taken
care of by the bitwise NOT operator that is represented with the tilde
symbol ~
The bitwise NOT is a unary operator that must be
placed on the left side of its operand as in
~Value
Here is an example:
PRINT ~158
To perform this operation, the Transact-SQL
interpreter considers each
bit that is part of the operand and inverts the value of each bit from 1
to 0 or from 0 to 1 depending on the value the bit is holding. This
operation can be resumed in the following table:
Consider a number with a byte value such as 248. In
our study of numeric systems, we define how to convert numbers from one system to another. Based on this,
the binary value of decimal 248 is 1111 1000 (and its hexadecimal value is
0xF8). If you apply the bitwise NOT operator on it to reverse the values
of its bits, you would get the following result:
Value |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
~Value |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
|
Bits Comparison: The Bitwise AND Operator & |
|
The bitwise & is a binary operator that uses the
following syntax
Operand1 & Operand2
This operator considers two values and compares the
bit of each with the corresponding bit of the other value. If both
corresponding bits are 1, the comparison produces 1. Otherwise, that is,
if either bit is 0, the comparison produces 0. This comparison is resumed
as follows:
|