![]() |
What the...? casting bug?
'splain this, somebody:
Code:
#define STRAIGHT_DRIVE_DIRECTION ( 127 + 30 )Changing the assignment to: Code:
steeringValue = (int) ((unsigned char) (STRAIGHT_DRIVE_DIRECTION));Is this weird, or is there something about type casting I don't understand? |
Re: What the...? casting bug?
Ohhhhhhh!
Funny how you understand something as soon as you post it. The compiler takes (127 + 30) and performs signed 8-bit arithmetic, yielding -99. Casting as a signed (int) duly kept the sign: -99. Casting as an unsigned char reinterpreted the value as 157, which was then cast as a signed int: 157. My error was in assuming that constants were treated as unsigned chars, but they are treated as signed chars. |
Re: What the...? casting bug?
Quote:
|
Re: What the...? casting bug?
Boy, you guys are fast. :)
Norm, I think if you had used Code:
#define STRAIGHT_DRIVE_DIRECTION ( 127u + 30 ) |
Re: What the...? casting bug?
There's a compuler option for that. Project>Build Options...>Project. Go to MPLAB C18. check "Treat 'char' as unsigned" (under Category General). The command-line flag is '-k'
|
| All times are GMT -5. The time now is 02:51. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi