Difference between revisions of "Shl"
From Lazarus wiki
Jump to navigationJump to searchm (Added back page link) |
(add cat and improve demonstration) |
||
Line 21: | Line 21: | ||
function ClearBit( const aValue, aBitNumber : integer ) : integer; | function ClearBit( const aValue, aBitNumber : integer ) : integer; | ||
begin | begin | ||
− | result := aValue and not( 1 shl aBitNumber ); | + | // sanity check supplied value |
+ | if (aBitNumber <0) or (aBitNumber >15) then | ||
+ | result :=0 | ||
+ | else | ||
+ | // value ok | ||
+ | result := aValue and not( 1 shl aBitNumber ); | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 27: | Line 32: | ||
If you call ClearBit(%1111,1), then you get %1101 (The [[Binary_numeral_system|binary number]] %1111 is 15 and %1101 = 13). | If you call ClearBit(%1111,1), then you get %1101 (The [[Binary_numeral_system|binary number]] %1111 is 15 and %1101 = 13). | ||
− | If you call ClearBit(13,2), then you get 9 (9 = %1001) . | + | If you call ClearBit(13,2), then you get 9 (9 = %1001). |
− | + | In this case, bits are numbered right to left from 0 to 15, bit 0 being the ones bit and bit 15 being the sign bit. | |
− | + | ||
− | + | {{Logical operators}} | |
* [[Or# Set a bit|Set a bit]] | * [[Or# Set a bit|Set a bit]] | ||
* [[Xor# Toggle a bit|Toggle a bit]] | * [[Xor# Toggle a bit|Toggle a bit]] | ||
− | |||
* [[Bit manipulation]] | * [[Bit manipulation]] | ||
* [[$Bitpacking]] | * [[$Bitpacking]] | ||
+ | |||
+ | [[Category:Operators]] | ||
+ | [[Category:Code]] |
Revision as of 23:27, 16 October 2020
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Back to Reserved words.
Overview
The reserved word Shift left (shl) performs a left bit-shift operation, shifting the value byt the amount of bits specified as an argument (opposite of shr).
Example:
Command is: 00000100 shl 2 (shift left 2 bits) Action is: 00000100 <- 00 (00 gets added to the right of the value; left 00 "disappears") Result is: 00010000
Clear a bit
function ClearBit( const aValue, aBitNumber : integer ) : integer;
begin
// sanity check supplied value
if (aBitNumber <0) or (aBitNumber >15) then
result :=0
else
// value ok
result := aValue and not( 1 shl aBitNumber );
end;
If you call ClearBit(%1111,1), then you get %1101 (The binary number %1111 is 15 and %1101 = 13).
If you call ClearBit(13,2), then you get 9 (9 = %1001).
In this case, bits are numbered right to left from 0 to 15, bit 0 being the ones bit and bit 15 being the sign bit.
operators |
|
---|---|
see also |
|