|
@@ -0,0 +1,110 @@
|
|
|
+{$mode objfpc}{$H+}
|
|
|
+
|
|
|
+uses
|
|
|
+ Classes, SysUtils;
|
|
|
+
|
|
|
+var
|
|
|
+ code: integer;
|
|
|
+
|
|
|
+function bitstostring(b: TBits): string;
|
|
|
+var
|
|
|
+ i: integer;
|
|
|
+ bs: string;
|
|
|
+begin
|
|
|
+ bs:= '';
|
|
|
+ for i:= 0 to b.Size - 1 do
|
|
|
+ if b[i] then
|
|
|
+ bs:= bs + '1'
|
|
|
+ else
|
|
|
+ bs:= bs + '0';
|
|
|
+ Result:= bs;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure Test;
|
|
|
+var
|
|
|
+ i, bsize1, bsize2: integer;
|
|
|
+ b1, b2, b3: TBits;
|
|
|
+begin
|
|
|
+ code := 0;
|
|
|
+ // OR
|
|
|
+ bsize1:= 16;
|
|
|
+ bsize2:= 164;
|
|
|
+ b1:= TBits.Create;
|
|
|
+ b2:= TBits.Create(bsize2);
|
|
|
+ b3:= TBits.Create(bsize2);
|
|
|
+ for i:= 0 to bsize1 - 1 do
|
|
|
+ b1[i]:= True;
|
|
|
+
|
|
|
+ b2.OrBits(b1);
|
|
|
+ b3.OrBits(b1);
|
|
|
+ for i:= b1.Size to bsize2 - 1 do
|
|
|
+ b3[i]:= False;
|
|
|
+ if not b2.Equals(b3) then
|
|
|
+ begin
|
|
|
+ WriteLn('OR');
|
|
|
+ writeln(bitstostring(b1));
|
|
|
+ writeln(bitstostring(b2));
|
|
|
+ writeln(bitstostring(b3));
|
|
|
+ code := code or 1;
|
|
|
+ end;
|
|
|
+ b1.Free;
|
|
|
+ b2.Free;
|
|
|
+ b3.Free;
|
|
|
+
|
|
|
+ // XOR
|
|
|
+ bsize1:= 16;
|
|
|
+ bsize2:= 164;
|
|
|
+ b1:= TBits.Create;
|
|
|
+ b2:= TBits.Create(bsize2);
|
|
|
+ b3:= TBits.Create(bsize2);
|
|
|
+ for i:= 0 to bsize1 - 1 do
|
|
|
+ b1[i]:= True;
|
|
|
+
|
|
|
+ b2.XOrBits(b1);
|
|
|
+ b3.XOrBits(b1);
|
|
|
+ for i:= b1.Size to bsize2 - 1 do
|
|
|
+ b3[i]:= False;
|
|
|
+ if not b2.Equals(b3) then
|
|
|
+ begin
|
|
|
+ WriteLn('XOR');
|
|
|
+ writeln(bitstostring(b1));
|
|
|
+ writeln(bitstostring(b2));
|
|
|
+ writeln(bitstostring(b3));
|
|
|
+ code := code or 2;
|
|
|
+ end;
|
|
|
+ b1.Free;
|
|
|
+ b2.Free;
|
|
|
+ b3.Free;
|
|
|
+
|
|
|
+ // AND
|
|
|
+ bsize1:= 16;
|
|
|
+ bsize2:= 164;
|
|
|
+ b1:= TBits.Create;
|
|
|
+ b2:= TBits.Create(bsize2);
|
|
|
+ b3:= TBits.Create(bsize2);
|
|
|
+ for i:= 0 to bsize1 - 1 do
|
|
|
+ b1[i]:= True;
|
|
|
+
|
|
|
+ b2.AndBits(b1);
|
|
|
+ b3.AndBits(b1);
|
|
|
+ for i:= b1.Size to bsize2 - 1 do
|
|
|
+ b3[i]:= False;
|
|
|
+ if not b2.Equals(b3) then
|
|
|
+ begin
|
|
|
+ WriteLn('AND');
|
|
|
+ writeln(bitstostring(b1));
|
|
|
+ writeln(bitstostring(b2));
|
|
|
+ writeln(bitstostring(b3));
|
|
|
+ code := code or 4;
|
|
|
+ end;
|
|
|
+ b1.Free;
|
|
|
+ b2.Free;
|
|
|
+ b3.Free;
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ test;
|
|
|
+ halt(code);
|
|
|
+end.
|
|
|
+
|
|
|
+
|