Thread View: pe.cust.bugs
2 messages
2 total messages
Started by Mark Brader
Sat, 09 Mar 1985 18:43
short casts, and long = {short,char} = long, don't work
Author: Mark Brader
Date: Sat, 09 Mar 1985 18:43
Date: Sat, 09 Mar 1985 18:43
86 lines
2333 bytes
2333 bytes
We run Edition VII on a 3220.
This program:
#include <stdio.h>
main()
{
long l[5];
short s;
l[0] = 0x234567;
l[1] = s = l[0];
l[2] = s;
l[3] = (short) l[0];
l[4] = (short) 0x234567;
for (s = 0; s < 5; ++s)
printf ("l[%d] = %x\n", s, l[s]);
printf ("\n(short)0x234567 = %x\n",
(short)0x234567);
printf ("\nsizeof (short) = %d\nsizeof (long) = %d\n",
sizeof (short), sizeof (long));
}
should output 4567 for l[1] through l[4] and for the cast in the second-last
printf. In fact, the result is:
l[0] = 456789
l[1] = 456789
l[2] = 6789
l[3] = 456789
l[4] = 456789
(short)0x456789 = 456789
sizeof (short) = 2
sizeof (long) = 4
If char is substituted throughout for short, the casts work, but l[1]
(long = char = long) is still wrong. The output then is:
l[0] = 234567
l[1] = 234567
l[2] = 67
l[3] = 67
l[4] = 67
(char)0x234567 = 67
sizeof (char) = 1
sizeof (long) = 4
In case anyone doesn't believe that l[1] is wrong in both the above
examples, they should consider this program:
#include <stdio.h>
main()
{
long l1, l2;
float f;
l1 = f = 123456789;
l2 = f;
printf ("%d\n%d\n", l1, l2);
}
This correctly produces:
123456784
123456784
Notice the loss of precision from the type conversions. Of course, an
assignment is an expression whose type is that of the variable assigned to.
I discovered the bug while debugging my signature line below.
It doesn't work on this machine for type short!
{ allegra | decvax | duke | ihnp4 | linus | watmath | ... } !utzoo!lsuc!msb
also via { hplabs | amd | ... } !pesnta!lsuc!msb
Mark Brader and uw-beaver!utcsri!lsuc!msb
#define msb(type) (~(((unsigned type)-1)>>1))
Re: short casts, and long = {short,char} = long, don't work
Author: Mark Brader
Date: Sat, 09 Mar 1985 21:11
Date: Sat, 09 Mar 1985 21:11
11 lines
751 bytes
751 bytes
I said: > We run Edition VII on a 3220. > This program: > ...... > should output 4567 for l[1] through l[4] and for the cast in the second-last > printf. Of course I meant 6789, not 4567. Mark Brader
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads