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
2595 views
Users
0 members are here
Keil C51 Tools
Options
Share
More actions
Cancel
Related
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