| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- MODULE essai4;
- IMPORT InOut;
- TYPE
- BitFunction = (set, clr);
- BitResult = (Set, Clear, Err);
- VAR
- i, j, k, n : CARDINAL;
- PROCEDURE BitTest (pos, val : CARDINAL) : BitResult;
- VAR mask, res : CARDINAL;
- BEGIN
- IF pos >= 0 THEN
- mask := SHIFT(1,pos);
- res := val AND mask;
- IF res = 0 THEN RETURN Clear ELSE RETURN Set END
- END;
- RETURN Err
- END BitTest;
- PROCEDURE Bit (f : BitFunction; pos, val : CARDINAL) : CARDINAL;
- VAR mask, res : CARDINAL;
- BEGIN
- mask := SHIFT(1,pos);
- CASE f OF
- set : res := val OR mask
- | clr : res := val AND (NOT mask)
- END;
- RETURN res
- END Bit;
- BEGIN
- i := 64;
- j := 127;
- k := 48;
- FOR n := 0 TO 15 DO
- InOut.WriteString ("Bit ");
- InOut.WriteCard (n, 2);
- InOut.WriteString (" in 127 is ");
- (* IF BitTest (n, j) = Set THEN
- InOut.WriteString ("Set.")
- ELSE
- InOut.WriteString ("Clear")
- END; *)
- InOut.WriteLn
- END;
- (* IF BitTest (3, j) = Set THEN InOut.WriteString ("Bit 3 in 127 is set") END; *)
- InOut.WriteLn;
- (* IF BitTest (5, i) = Clear THEN InOut.WriteString ("Bit 5 in 64 is clear") END; *)
- InOut.WriteLn;
- k := VAL (CARDINAL, Bit (set, 1, k));
- InOut.WriteCard (k, 6);
- InOut.WriteLn;
- END essai4.
|