program FPCShr;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX} {$IFDEF UseCThreads} cthreads, {$ENDIF} {$ENDIF}
Classes,
SysUtils
{ you can add units after this };
function GetVariable(v: QWord): QWord;
begin
Result := v;
end;
var
l8: byte;
l16: word;
l32: DWord;
l64: QWord;
begin
WriteLn('Constants:');
l8 := high(l8);
l8 := l8 shr ((sizeof(l8) * 8));
writeln(sizeof(l8) * 8, ':', IntToHex(l8, sizeof(l8) * 2));
l16 := high(l16);
l16 := l16 shr ((sizeof(l16) * 8));
writeln(sizeof(l16) * 8, ':', IntToHex(l16, sizeof(l16) * 2));
l32 := high(l32);
l32 := l32 shr ((sizeof(l32) * 8));
writeln(sizeof(l32) * 8, ':', IntToHex(l32, sizeof(l32) * 2));
l64 := high(l64);
l64 := l64 shr ((sizeof(l64) * 8));
writeln(sizeof(l64) * 8, ':', IntToHex(l64, sizeof(l64) * 2));
WriteLn('');
WriteLn('Right side is variable:');
l8 := high(l8);
l8 := l8 shr GetVariable(8);
writeln(sizeof(l8) * 8, ':', IntToHex(l8, sizeof(l8) * 2));
l16 := high(l16);
l16 := l16 shr GetVariable(16);
writeln(sizeof(l16) * 8, ':', IntToHex(l16, sizeof(l16) * 2));
l32 := high(l32);
l32 := l32 shr GetVariable(32);
writeln(sizeof(l32) * 8, ':', IntToHex(l32, sizeof(l32) * 2));
l64 := high(l64);
l64 := l64 shr GetVariable(64);
writeln(sizeof(l64) * 8, ':', IntToHex(l64, sizeof(l64) * 2));
WriteLn('');
WriteLn('Both sides are variable:');
l8 := high(l8);
l8 := Byte(GetVariable(l8)) shr Byte(GetVariable(8));
writeln(sizeof(l8) * 8, ':', IntToHex(l8, sizeof(l8) * 2));
l16 := high(l16);
l16 := Word(GetVariable(l16)) shr Byte(GetVariable(16));
writeln(sizeof(l16) * 8, ':', IntToHex(l16, sizeof(l16) * 2));
l32 := high(l32);
l32 := DWord(GetVariable(l32)) shr Byte(GetVariable(32));
writeln(sizeof(l32) * 8, ':', IntToHex(l32, sizeof(l32) * 2));
l64 := high(l64);
l64 := QWord(GetVariable(l64)) shr Byte(GetVariable(64));
writeln(sizeof(l64) * 8, ':', IntToHex(l64, sizeof(l64) * 2));
WriteLn('');
WriteLn('Left side is variable:');
l8 := high(l8);
l8 := Byte(GetVariable(l8)) shr 8;
writeln(sizeof(l8) * 8, ':', IntToHex(l8, sizeof(l8) * 2));
l16 := high(l16);
l16 := Word(GetVariable(l16)) shr 16;
writeln(sizeof(l16) * 8, ':', IntToHex(l16, sizeof(l16) * 2));
l32 := high(l32);
l32 := DWord(GetVariable(l32)) shr 32;
writeln(sizeof(l32) * 8, ':', IntToHex(l32, sizeof(l32) * 2));
l64 := high(l64);
l64 := QWord(GetVariable(l64)) shr 64;
writeln(sizeof(l64) * 8, ':', IntToHex(l64, sizeof(l64) * 2));
ReadLn;
end.