31 Jan 2006 21:23:00 -0500

Related articles |
---|

[2 earlier articles] |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 rsc@swtch.com (Russ Cox) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 jm@bourguet.org (Jean-Marc Bourguet) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 mailbox@dmitry-kazakov.de (Dmitry A. Kazakov) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 gneuner2@comcast.net (George Neuner) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 rivers@dignus.com (Thomas David Rivers) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 david@tribble.com (David R Tribble) (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 henry@spsystems.net (2006-01-31) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 gah@ugcs.caltech.edu (glen herrmannsfeldt) (2006-02-02) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 DrDiettrich@compuserve.de (Hans-Peter Diettrich) (2006-02-02) |

Re: 1 - 1, 1 -1, 1-1, 1 - -1 and -2147483648 david@tribble.com (David R Tribble) (2006-02-03) |

From: | henry@spsystems.net (Henry Spencer) |

Newsgroups: | comp.compilers |

Date: | 31 Jan 2006 21:23:00 -0500 |

Organization: | SP Systems, Toronto, Canada |

References: | 06-01-131 |

Keywords: | lex, arithmetic |

Posted-Date: | 31 Jan 2006 21:23:00 EST |

Edsko de Vries <devriese@cs.tcd.ie> wrote:

*>The problem is, of course, overflow: -2147483648 is a valid negative*

*>number (assuming 32-bit numbers), but the integer 2147483648 is _not_ a*

*>valid positive number... Is there a good solution...?*

The hack that has been used for this in the past is to compute and store a

number as the negative of its actual value (temporarily, until you know

whether there's a unary minus in front).

If that's too distasteful, you really have to find an extra bit somewhere:

+ Store the constant as an unsigned number (32-bit unsigned goes up to

4_294_967_295 without overflow, so 2_147_483_648 is no problem),

until you know the sign.

+ Use a larger signed type, if you have one.

+ Use a bignum (unlimited-length integer) library.

+ Store the number as a string, unconverted, until you know its sign.

--

spsystems.net is temporarily off the air; | Henry Spencer

mail to henry at zoo.utoronto.ca instead. | henry@spsystems.net

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.