home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l3p010 < prev    next >
Text File  |  1990-07-15  |  4KB  |  104 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 3 Part 010  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.              ┌────────────────────────────────────┐
  6.              │   Double Numbers or Double Words.  │
  7.              └────────────────────────────────────┘
  8.  
  9. What is a double number or double word?
  10.  
  11. - Consists of 4 bytes or 32 binary bits.
  12.  
  13. - The bit pattern in a double word can represent:
  14.   i)   an unsigned decimal number from 0 through 4,294,967,295
  15.   ii)  an unsigned hexadecimal number from $0 through $FFFFFFFF
  16.   iii) any binary number from 00000000000000000000000000000000
  17.                       through 11111111111111111111111111111111
  18.  
  19. - Often the double word is used as the data structure to represent long
  20.   integers in computer languages such as C, Pascal and Forth. In Forth
  21.   long integers or 32-bit integers are often called double numbers.
  22.   Double numbers can be either signed or unsigned.  Normally when we just
  23.   say "double number" we mean "signed double number", if we want to
  24.   refer to the unsigned variety then we will specifically say "unsigned
  25.   double number" !
  26.  
  27. - As we saw above, unsigned double numbers range from 0 through
  28.   4,294,967,295 decimal. (Signed) Double numbers range from
  29.   -2,147,483,648 through +2,147,483,647.
  30.  
  31. - ** We can also place double numbers on Forth's parameter stack. **
  32.   ** To put a double number on the stack it must be entered with  **
  33.   ** a decimal point. The decimal point would normally be placed  **
  34.   ** at the end of the number ( but a decimal point any where     **
  35.   ** in the number will suffice).                                 **
  36.  
  37. - Most of the single number operators are also available for double
  38.   numbers.  To distinguish between them from their single number counter
  39.   parts they are usually prefixed by "2" or "D" .  Generally speaking
  40.   stack operators are prefixed by "2" and arithmetic operators are
  41.   prefixed by "D".... Thus:
  42.  
  43.   SWAP becomes 2SWAP
  44.   DUP  becomes 2DUP
  45.   +    becomes D+
  46.   -    becomes D-
  47.   .    becomes D.
  48.  
  49. Here is some sample output captured directly from Forth:
  50. 11. 33. .S  <enter> [4]     11       0      33       0  ok
  51. D+ .S       <enter> [2]     44       0  ok
  52. D.          <enter> 44  ok
  53. 11. 33. .S  <enter> [4]     11       0      33       0  ok
  54. 2SWAP   .S  <enter> [4]     33       0      11       0  ok
  55. D-  .S      <enter> [2]     22       0  ok
  56. D.          <enter> 22  ok
  57.  
  58. Notice that when we print the stack what we see are single numbers. Note
  59. also that the high 16 bits of the double number are on top of the stack.
  60. It may confuse you to see double numbers represented as two single
  61. numbers when using negative numbers or numbers larger than 65,535.
  62. For example:
  63.  
  64. -11. -33. .S       <enter> [4]  65525   65535   65503   65535  ok
  65. D+  .S             <enter> [2]  65492   65535  ok
  66. D.                 <enter> -44  ok
  67. 111111. 333333. .S <enter> [4]  45575       1    5653       5  ok
  68. D+ .S              <enter> [2]  51228       6  ok
  69. D.                 <enter> 444444  ok
  70.  
  71. If you don't like the way the F-PC stack print operator displays double
  72. numbers we could write our own special word to display double numbers.
  73. Try the following:
  74.  
  75. \ This stack print will print double numbers that are on the stack.
  76. \ If there is an odd number of numbers on the stack or if the stack
  77. \ has a mixed combination of singles and doubles you are likely to
  78. \ get confusing results.
  79. : .SD ( -- )
  80.      DEPTH ?DUP IF
  81.                  0 ?DO DEPTH I - 1- PICK
  82.                        DEPTH I - 2- PICK
  83.                        D.  8 EMIT        \ Back up one space
  84.                        ASCII . EMIT      \ Indicate double with .
  85.                  2 +LOOP
  86.                 ELSE ." Empty" THEN ;
  87.  
  88. Here is a sample of the output produced by .SD
  89. -11. -22.  .SD  <enter> -11.  -22.   ok
  90. D-  .SD         <enter> 11.  ok
  91. D.              <enter> 11  ok
  92. 111111. 222222. <enter>  ok
  93. .SD             <enter> 111111.  222222.   ok
  94. D+ .SD          <enter> 333333.   ok
  95. D.              <enter> 333333  ok
  96.  
  97. Notice that D. does not display a double number with a trailing
  98. decimal point.  We added this feature to .SD to remind us that
  99. we have a stack display of double numbers.
  100.  
  101. ┌────────────────────────────────────┐
  102. │  Please move to Lesson 3 Part 020  │
  103. └────────────────────────────────────┘
  104.