|
|
|
| Nothing in the KOP can prepare me for you. |
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Typecasting Resources
It seems that many students are bitten by the typecasting bug. I cannot seem to find a definitive reference on typecasting for FIRST and would like to generate some more documentation on this topic. Are there any specific "sections" or white papers that cover this topic? If not, I will consider writing one...
Please post your examples and resources that you would like me to include. -Brian |
|
#2
|
|||||
|
|||||
|
Re: Typecasting Resources
The MPLAB C18 Compiler User's Guide goes over the peculiarities of the PIC18's type conversion system, which actually goes against the ISO C mandates regarding automatic type conversions.
|
|
#3
|
|||
|
|||
|
Re: Typecasting Resources
I suspect the underlying problem is that the students don't understand the size implications of the different variable types and what happens when you invoke arithmetic operations where the result exceeds that size. Or just how easy it is to exceed the size. Simply adding two quantities can produce an overflow. Also, with integer arithmetic the order the operations are specified can how a profound impact on the result. Understanding these topics is required to understand why most of the casting that is needed to program the FIRST RC is necessary.
|
|
#4
|
|||
|
|||
|
Re: Typecasting Resources
Quote:
Please post more info/examples on this topic if you can! |
|
#5
|
|||
|
|||
|
Re: Typecasting Resources
The simplest example I can think of is:
char x = 65; char y = 66; char a; int b; /* a is not large enough to hold 131 even if the arithmetic did what was expected. a equals -125. */ a = x + y; /* b = large enough to hold 131 but the arithmetic will still be done as above since the compiler doesn't look at the left side of the equation. */ b = x + y; /* Force the arithmetic to be done in 16 bits by casting one of the members */ /* a still can't hold 131 but the compiler should issue a warning for loss of precision if the warning level isn't high enough. ALWAYS set the warning level as high as possible! */ a = (int) x + y; /* This gets rid of the warning but is still wrong. */ a = (char) ((int) x + y); /* The "correct" way to do it. b = 131 */ b = (int) x + y; |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Resources | Peg Cwiakala | General Forum | 1 | 31-03-2006 07:21 |
| Rookie Resources... | Gurdian | General Forum | 5 | 13-03-2006 07:53 |
| Team Resources | alfman05302001 | General Forum | 4 | 04-05-2004 15:51 |
| List of Resources? | Eric Bareiss | General Forum | 9 | 31-01-2004 07:51 |
| Resources | archiver | 2000 | 1 | 23-06-2002 23:49 |