essai4.mod 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. MODULE essai4;
  2. IMPORT InOut;
  3. TYPE
  4. BitFunction = (set, clr);
  5. BitResult = (Set, Clear, Err);
  6. VAR
  7. i, j, k, n : CARDINAL;
  8. PROCEDURE BitTest (pos, val : CARDINAL) : BitResult;
  9. VAR mask, res : CARDINAL;
  10. BEGIN
  11. IF pos >= 0 THEN
  12. mask := SHIFT(1,pos);
  13. res := val AND mask;
  14. IF res = 0 THEN RETURN Clear ELSE RETURN Set END
  15. END;
  16. RETURN Err
  17. END BitTest;
  18. PROCEDURE Bit (f : BitFunction; pos, val : CARDINAL) : CARDINAL;
  19. VAR mask, res : CARDINAL;
  20. BEGIN
  21. mask := SHIFT(1,pos);
  22. CASE f OF
  23. set : res := val OR mask
  24. | clr : res := val AND (NOT mask)
  25. END;
  26. RETURN res
  27. END Bit;
  28. BEGIN
  29. i := 64;
  30. j := 127;
  31. k := 48;
  32. FOR n := 0 TO 15 DO
  33. InOut.WriteString ("Bit ");
  34. InOut.WriteCard (n, 2);
  35. InOut.WriteString (" in 127 is ");
  36. (* IF BitTest (n, j) = Set THEN
  37. InOut.WriteString ("Set.")
  38. ELSE
  39. InOut.WriteString ("Clear")
  40. END; *)
  41. InOut.WriteLn
  42. END;
  43. (* IF BitTest (3, j) = Set THEN InOut.WriteString ("Bit 3 in 127 is set") END; *)
  44. InOut.WriteLn;
  45. (* IF BitTest (5, i) = Clear THEN InOut.WriteString ("Bit 5 in 64 is clear") END; *)
  46. InOut.WriteLn;
  47. k := VAL (CARDINAL, Bit (set, 1, k));
  48. InOut.WriteCard (k, 6);
  49. InOut.WriteLn;
  50. END essai4.