The information in this article applies to:
SYMPTOMSThe ISHL and ISHFT intrinsic functions may return incorrect results when shifting INTEGER*1 or INTEGER*2 variables. The incorrect results occur only when right-shifting negative values. CAUSEThe compiler converts the value to be shifted to a 4-byte value. For 1- and 2-byte negative integers, the higher order bits are filled with 1s, which can be incorrectly shifted into the low order bytes. RESOLUTIONConvert the bit pattern of the negative INTEGER*1 or INTEGER*2 value to an unsigned INTEGER*4 value. This is done by adding 256 to a negative INTEGER*1 value or by adding 65536 to a negative INTEGER*2 value. Then shift the resulting INTEGER*4 value. STATUSMicrosoft has confirmed this to be a problem in FORTRAN PowerStation 32 for Windows NT version 1.0 and MS-DOS version 1.0 and 1.0a. This problem was fixed in FORTRAN PowerStation 32, version 4.0. MORE INFORMATIONThe following sample illustrates the problem: Sample Code #1
OutputBefore shift 85 FF85The following code illustrates the article's resolution: Sample Code #2
OutputBefore shift 85 FF85 Additional query words: 1.00
Keywords : kbFortranPS kbLangFortran |
Last Reviewed: November 2, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |