× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: RE: [Re: RPGILE V4.3 Gotcha]
  • From: Joel Fritz <JFritz@xxxxxxxxxxxxxxxx>
  • Date: Fri, 8 Oct 1999 16:26:08 -0700

You're right, what I was trying to say is that C doesn't  care about the
overflow in the signed (or unsigned) integer.  If you overflow a signed
integer you'll most likely get a negative, overflow an unsigned integer
you'll probably get something smaller than you expected.

There's also the thing with floating point calculations that should result
in zero, but that's just a formatting issue. <g>
> -----Original Message-----
> From: Jim Langston [mailto:jlangston@conexfreight.com]
> Sent: Friday, October 08, 1999 3:05 PM
> To: RPG400-L@midrange.com
> Subject: Re: [Re: RPGILE V4.3 Gotcha]
> 
> 
> Like I was saying, 65100 stored in a SIGNED integer is -436.  
> Unsigned it would
> be 65100.
> 
> Regards,
> 
> Jim Langston
> 
> Joel Fritz wrote:
> 
> > My recollection from turbo c++ back in 91 or so, that was 
> the way integer
> > overflow worked.  I think unsigned integers just wrapped 
> which is the
> > behavior you're seeing except it's going through the two's 
> complement
> > translation into negative numbers.  It's actually a lot 
> like RPG truncation
> > because the leftmost binary digit goes to the bit bucket.
> > e.g. 1111 1111 1111 1111 + 0000 0000 0000 0001 = 0000 0000 0000 0000
> >
> > My C teacher's favorite saying was "C doesn't care."
> >
> > > -----Original Message-----
> > > From: Jim Langston [mailto:jlangston@conexfreight.com]
> > > Sent: Friday, October 08, 1999 12:32 PM
> > > To: RPG400-L@midrange.com
> > > Subject: Re: [Re: RPGILE V4.3 Gotcha]
> > >
> > >
> > > You forgot something, the range of a short integer in C is
> > > -32768 to 32767
> > > because of the sign bit.  When you assign the value 65100 to
> > > the variable
> > > A it is taking the high bit (32768) and making it the sign bit.
> > >
> > > Also, in Intel integers are stored in what is called "2's
> > > compliment".  The bit's
> > >
> > > are reversed and 1 is added (don't ask me why, it was
> > > explained to me once
> > > but didn't make much sense).  The effect of this is: take
> > > your number and
> > > calculate what it would be minus the high bit, 32768, and it
> > > comes out to
> > > 32332.  32768 - 32332 is 436.  Plus the sign bit makes it
> > > -436, which is your
> > > answer.
> > >
> > > In C you can assign between characters, integers and 
> hexadecimal with
> > > out any complaint from the compiler.  The compiler doesn't
> > > care if you give
> > > it the hexadecimal format (0x1234 or whatever) or the decimal
> > > format (65100)
> > > it happily goes along and does exactly what you told it, it
> > > assigns the bit
> > > pattern
> > > you gave it to the variable.
> > >
> > > To check this yourself, assign a value lower than 32767 to
> > > the variable A, such
> > > as 32000, and by multiplying it by 100 it should overflow the
> > > integer (making it
> > > 3200000) then divide by 100, and it would come back to 32000.
> > >
> > > I am actually surpassed by this, however, as I would of
> > > thought that you would of
> > >
> > > gotten an over flow error, but I guess C is converting it to
> > > a long in the math
> > > when
> > > it sees it has to, then type casting it back to a short 
> to assign it.
> > >
> > > Regards,
> > >
> > > Jim Langston
> > >
> > > Buck Calabro wrote:
> > >
> > > > > >After 5 or 6 languages, I still usually check to make sure
> > > > >they are doing it the same way.  And so far I haven't run
> > > > >across any problems, not even with the MULT statement
> > > > >in RPG.
> > > >
> > > > Actually, RPG was always different from other languages
> > > because of the fixed
> > > > size of the numbers.  We never much thought about it
> > > because MULT and DIV
> > > > cannot produce intermediate results.  I believe that EVAL
> > > works very much
> > > > the same as other languages.  Take this C code that I just
> > > tried on the 400:
> > > >
> > > > #include <stdio.h>
> > > > void main () {
> > > >
> > > > short a;
> > > > short b;
> > > > long  c;
> > > >
> > > > a = 65100;
> > > > b = 100;
> > > > c = a * b / 100;
> > > > printf("result=%i\n", c);
> > > >
> > > > }
> > > >
> > > > Although "natural" arithmetic tells you that the result
> > > should be 65100, the
> > > > result is actually -436.  I have no run-time error, nor 
> do I have a
> > > > compile-time error warning me that I might lose precision.
> > > I am certainly
> > > > not versed in too many languages, but it seems to me that
> > > any language
> > > > allowing expressions will exhibit similar behaviour.
> > > >
> > > > Buck Calabro
> > >
> > > +---
> > > | This is the RPG/400 Mailing List!
> > > | To submit a new message, send your mail to 
> RPG400-L@midrange.com.
> > > | To subscribe to this list send email to 
> RPG400-L-SUB@midrange.com.
> > > | To unsubscribe from this list send email to
> > > RPG400-L-UNSUB@midrange.com.
> > > | Questions should be directed to the list owner/operator:
> > > david@midrange.com
> > > +---
> > >
> > +---
> > | This is the RPG/400 Mailing List!
> > | To submit a new message, send your mail to RPG400-L@midrange.com.
> > | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> > | To unsubscribe from this list send email to 
> RPG400-L-UNSUB@midrange.com.
> > | Questions should be directed to the list owner/operator: 
> david@midrange.com
> > +---
> 
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to RPG400-L@midrange.com.
> | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to 
> RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner/operator: 
> david@midrange.com
> +---
> 
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.