<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>  <br>  I have some 32bit constants.   <br>  <br>e.g.:  <br>  <br> CONST UID_WORD = 16_97E237E2;  <br>  <br> but this isn't right. <br> On a 64bit system, that is a 64bit integer <br> with a "large" positive value, instead of <br> the intended 32bit negative value. <br>  <br> Is there an ideal (i.e. CONST) way to do this? <br> Portably to 64bit systems? <br>  <br> I have found two unsatisfactory choices: <br>  <br> 1) use decimal: <br>   <br> #include <stdio.h> <br> int main() <br> { <br> printf("%X %d\n", 0x97E237E2); <br> return 0; <br> } <br> <br> <br> cc 1.c <br> ./a.out <br>97E237E2 -1881139893<br><br>CONST UID_WORD = (* 16_97E237E2 *) -1881139893;<br> <br> <br> 2) change it to VAR and a runtime conversion:<br> <br> <br> PROCEDURE SignExtend(a, b: INTEGER): INTEGER =<br> BEGIN<br>    b := Word.LeftShift(-1, b - 1); <br>    IF Word.And(a, b) # 0 THEN <br>        a := Word.Or(a, b); <br>    END; <br>    RETURN a; <br> END SignExtend; <br><br> PROCEDURE SignExtend32(a: INTEGER): INT32 = <br> BEGIN <br>     RETURN SignExtend(a, 32); <br> END SignExtend32; <br><br> CONST IntegerToTypeid = SignExtend32; <br><br><br> VAR UID_WORD := IntegerToTypeid(16_97E237E2); (* CARDINAL *) <br><br>This gives a warning:<br><br>CONST UID_INTEGER : INT32 = 16_195C2A74; (* INTEGER *)<br><br>and then at runtime gives an error assigning it to an INT32.<br><br><br> any other ways? <br><br><br>Thanks,<br> - Jay<br><br><br>                                       </div></body>
</html>