ビットシフト

明解C言語 入門編 > 7. 基本型 >

ビットシフト

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

function count_bits(x:Longword):Integer;
var
count:Integer;
begin
count := 0;
while (x <> 0) do
begin
if x and 1 <> 0 then inc(count);
x := x shr 1;
end;
result := count;
end;

function int_bits():Integer;
begin
result := count_bits(Longword(not 0));
end;

procedure print_bits(x:Longword);
var
i: Integer;
begin
for i := int_bits() - 1 downto 0 do
begin
if x shr i and 1 <> 0 then
write('1')
else
write('0');
end;

writeln('');
end;

procedure main();
var
na: Longword;
begin
na := 12345;
write('A = '); print_bits(na);
write('A >> 1 = '); print_bits(na shr 1);
write('A >> 2 = '); print_bits(na shr 2);
write('A >> 3 = '); print_bits(na shr 3);
write('A >> 4 = '); print_bits(na shr 4);
writeln('');

write('A = '); print_bits(na);
write('A << 1 = '); print_bits(na shl 1);
write('A << 2 = '); print_bits(na shl 2);
write('A << 3 = '); print_bits(na shl 3);
write('A << 4 = '); print_bits(na shl 4);
end;

begin
main;
end.

実行結果

S:\>lesson057\project1.exe
A = 00000000000000000011000000111001
A >> 1 = 00000000000000000001100000011100
A >> 2 = 00000000000000000000110000001110
A >> 3 = 00000000000000000000011000000111
A >> 4 = 00000000000000000000001100000011

A = 00000000000000000011000000111001
A << 1 = 00000000000000000110000001110010
A << 2 = 00000000000000001100000011100100
A << 3 = 00000000000000011000000111001000
A << 4 = 00000000000000110000001110010000