Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Range of short int?

Reply
Thread Tools

Range of short int?

 
 
alistair_happencross@hotmail.com
Guest
Posts: n/a
 
      12-24-2005
In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
1999 reprint), this is on pages 71-72:

"we think of a short int as an object that can take on values between
-32768 and 32767, instead of as a 16-bit object"

My understanding of C is that the negative number should be -32767. The
errata list on his website shows that it was -32767 and was changed to
-32768 for subsequent printings.

Which is correct?

 
Reply With Quote
 
 
 
 
Robert Gamble
Guest
Posts: n/a
 
      12-24-2005
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
> 1999 reprint), this is on pages 71-72:
>
> "we think of a short int as an object that can take on values between
> -32768 and 32767, instead of as a 16-bit object"
>
> My understanding of C is that the negative number should be -32767. The
> errata list on his website shows that it was -32767 and was changed to
> -32768 for subsequent printings.
>
> Which is correct?


The most negative value for a signed short int is at least -32767, on a
2's complement machine this will be -32768.

Robert Gamble

 
Reply With Quote
 
 
 
 
William J. Leary Jr.
Guest
Posts: n/a
 
      12-24-2005
<(E-Mail Removed)> wrote in message
news:(E-Mail Removed) ups.com...
> My understanding of C is that the negative number should be -32767. The
> errata list on his website shows that it was -32767 and was changed to
> -32768 for subsequent printings.


0x8001 = -32767
0x8000 = -32768

I remember this from years ago, but as 2's complement issue, not a C one.

At that time it was being referred to (at least in the circles I occupied) as
the "negative zero" issue. I never saw the problem myself, but it caused a big
flap amongst the guys doing the microcode for the math unit. I seem to recall
even understanding why it was an issue to them, though I've forgotten from this
distance in time.

- Bill


 
Reply With Quote
 
Chuck F.
Guest
Posts: n/a
 
      12-24-2005
(E-Mail Removed) wrote:
>
> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition,
> January 1999 reprint), this is on pages 71-72:
>
> "we think of a short int as an object that can take on values
> between -32768 and 32767, instead of as a 16-bit object"
>
> My understanding of C is that the negative number should be
> -32767. The errata list on his website shows that it was -32767
> and was changed to -32768 for subsequent printings.
>
> Which is correct?


Neither. It depends on how the system was designed. The actual
values, for your system, are described in <limits.h>

--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson
More details at: <http://cfaj.freeshell.org/google/>
 
Reply With Quote
 
Robert Gamble
Guest
Posts: n/a
 
      12-24-2005
Robert Gamble wrote:
> (E-Mail Removed) wrote:
> > In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
> > 1999 reprint), this is on pages 71-72:
> >
> > "we think of a short int as an object that can take on values between
> > -32768 and 32767, instead of as a 16-bit object"
> >
> > My understanding of C is that the negative number should be -32767. The
> > errata list on his website shows that it was -32767 and was changed to
> > -32768 for subsequent printings.
> >
> > Which is correct?

>
> The most negative value for a signed short int is at least -32767, on a
> 2's complement machine this will be -32768.


On a 2's complement machine *using 16 bits*, that will be -32768, the
magnitude could be larger if more bits are used in the representation.

Robert Gamble

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      12-24-2005
(E-Mail Removed) writes:
> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
> 1999 reprint), this is on pages 71-72:
>
> "we think of a short int as an object that can take on values between
> -32768 and 32767, instead of as a 16-bit object"
>
> My understanding of C is that the negative number should be -32767. The
> errata list on his website shows that it was -32767 and was changed to
> -32768 for subsequent printings.


The minimum guaranteed range of short is -32767 .. +32767. On a
two's-complement system (i.e., almost all modern systems), a 16-bit
signed type is capable of representing an additional negative value,
-32768. For absolute portability, you shouldn't assume that short can
represent -32768.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Malcolm
Guest
Posts: n/a
 
      12-24-2005

<(E-Mail Removed)> wrote
> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
> 1999 reprint), this is on pages 71-72:
>
> "we think of a short int as an object that can take on values between
> -32768 and 32767, instead of as a 16-bit object"
>
> My understanding of C is that the negative number should be -32767. The
> errata list on his website shows that it was -32767 and was changed to
> -32768 for subsequent printings.
>
> Which is correct?
>

The first.
If you want to treat a short as an abstract integer, rather than a series of
bits, the obvious reason is so that you are not tied to two's complement
representation.
Therefore you need to follow the standard, which guarantees the range -32767
to + 32767 only. (-32768 might be used as a trap representation, for
example, or the machine might be one's complement, or use a weird and
wonderful system not yet devised).


 
Reply With Quote
 
Flash Gordon
Guest
Posts: n/a
 
      12-24-2005
Robert Gamble wrote:
> (E-Mail Removed) wrote:
>> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
>> 1999 reprint), this is on pages 71-72:
>>
>> "we think of a short int as an object that can take on values between
>> -32768 and 32767, instead of as a 16-bit object"
>>
>> My understanding of C is that the negative number should be -32767. The
>> errata list on his website shows that it was -32767 and was changed to
>> -32768 for subsequent printings.
>>
>> Which is correct?

>
> The most negative value for a signed short int is at least -32767, on a
> 2's complement machine this will be -32768.


According to N1124 for a 2s complement machine sign bit set and all
other bits 0 is allowed to be a trap representation, so it could still
be -32767. Admittedly I'm not aware of any systems that do this.
--
Flash Gordon
Living in interesting times.
Although my email address says spam, it is real and I read it.
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      12-24-2005
"Malcolm" <(E-Mail Removed)> writes:
[...]
> If you want to treat a short as an abstract integer, rather than a series of
> bits, the obvious reason is so that you are not tied to two's complement
> representation.
> Therefore you need to follow the standard, which guarantees the range -32767
> to + 32767 only. (-32768 might be used as a trap representation, for
> example, or the machine might be one's complement, or use a weird and
> wonderful system not yet devised).


C99 6.2.6.2 limits the possibilites to two's complement, ones'
complement, and sign and magnitude. (Yes, the placement of the
apostrophes is correct.)

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Emmanuel Delahaye
Guest
Posts: n/a
 
      12-26-2005
(E-Mail Removed) a écrit :
> In my copy of "Algorithms in C" by R. Sedgewick (3rd edition, January
> 1999 reprint), this is on pages 71-72:
>
> "we think of a short int as an object that can take on values between
> -32768 and 32767, instead of as a 16-bit object"
>
> My understanding of C is that the negative number should be -32767. The
> errata list on his website shows that it was -32767 and was changed to
> -32768 for subsequent printings.
>
> Which is correct?


-32767 is correct from the C language definition point of view. It is
the guaranteed minimum value for a [short ]int.

-32768 could be a value of INT_MIN or SHRT_MIN on a platform with
negatives coded with 2-complement. It's a plateform question.

--
A+

Emmanuel Delahaye
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Difference of extern short *x and extern short x[]? Andre C Programming 5 07-17-2012 07:38 PM
unsigned short, short literals Ioannis Vranos C Programming 5 03-05-2008 01:25 AM
very short range Andreas Y. Wireless Networking 4 02-08-2008 01:30 AM
longs, long longs, short short long ints . . . huh?! David Geering C Programming 15 01-11-2007 09:39 PM
unsigned short short? slougheed@gmail.com C++ 4 10-16-2006 11:25 PM



Advertisments