Arm Community
Site
Search
User
Site
Search
User
Support forums
Keil forum
C Problem?
Jump...
Cancel
State
Not Answered
Locked
Locked
Replies
14 replies
Subscribers
22 subscribers
Views
2242 views
Users
0 members are here
Keil C51 Tools
Options
Share
More actions
Cancel
Related
How was your experience today?
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion
C Problem?
Jim Leifker
over 24 years ago
unsigned char x=1; x=(x++)<<3;
Using uVision 6.12
Gives answer of 8
It shifts binary 1 left and doesn't increment.
(even when optimization set to level 0)
Using Micorsoft C++ 6.0
Gives answer of 9
It shifts binary 1 left then increments.
I was a little confused with both answers because I was thought that
the increment would happen first because of the ( ) around x++ then
shift left three giving 16 but that's not the case.
This gives me 16 in both Keil and MS.
x=(++x)<<3; works it gives 16
Parents
0
Andrew Neil
over 24 years ago
in reply to
Sergey Dymchishin
unsigned char x = 1; x = (x++) << 3;
"MSVC result '9' ... can be explained only if suppose that 'x++' evaluated after assigning '8' to x."
Which is what I'd expect from a
post
increment:
"
x++
" means "take the value of
x
and then, when you've done with it, increment
x
by one"
In this case,
"when you've done with it"
means,
"when you've shifted it"
However, I agree with the consensus that this is ambiguous and best avoided!
Cancel
Vote up
0
Vote down
Cancel
Reply
0
Andrew Neil
over 24 years ago
in reply to
Sergey Dymchishin
unsigned char x = 1; x = (x++) << 3;
"MSVC result '9' ... can be explained only if suppose that 'x++' evaluated after assigning '8' to x."
Which is what I'd expect from a
post
increment:
"
x++
" means "take the value of
x
and then, when you've done with it, increment
x
by one"
In this case,
"when you've done with it"
means,
"when you've shifted it"
However, I agree with the consensus that this is ambiguous and best avoided!
Cancel
Vote up
0
Vote down
Cancel
Children
No data