Casting problem ?! 
December 2nd, 2005, 07:55 AM
| | | Casting problem ?!
what is stored in "i" variable in this program ?
long i;
float y;
float number;
y = number;
i = * ( long * ) &y;
notice that "number" variable has been initialized ... | 
December 2nd, 2005, 08:05 AM
| | | Re: Casting problem ?!
Stranger wrote:[color=blue]
> what is stored in "i" variable in this program ?
>
> long i;
> float y;
> float number;
> y = number;
> i = * ( long * ) &y;
>
> notice that "number" variable has been initialized ...[/color]
Where is the initialization of "number"? I nothing initialized, and y
assigned a junk value.
Also, please use C++-style casts - they are provided for a reason.
The result would be a junk value in "i". | 
December 2nd, 2005, 08:05 AM
| | | Re: Casting problem ?!
i *think* he may have meant "note" that "number" has been initialized.
ie, elsewhere in his program that he has not shown.
however, i wouldnt know whats in i... why cant you just do
i = long(y)? or (long)y? | 
December 2nd, 2005, 08:45 AM
| | | Re: Casting problem ?!
The first N bytes of y.
N=sizeof(long)
The content of the first N bytes depends on how your computer an OS
represents floats in memory.
Stranger wrote:[color=blue]
> what is stored in "i" variable in this program ?
>
> long i;
> float y;
> float number;
> y = number;
> i = * ( long * ) &y;
>
> notice that "number" variable has been initialized ...
>[/color] | 
December 2nd, 2005, 01:45 PM
| | | Re: Casting problem ?!
Mark wrote:[color=blue]
> i *think* he may have meant "note" that "number" has been initialized.
> ie, elsewhere in his program that he has not shown.
>
> however, i wouldnt know whats in i... why cant you just do
> i = long(y)? or (long)y?[/color]
Perhaps because that was not the author's intent. If s/he wanted to
truncate y to the nearest whole number, s/he would have done just what
you said. If, however, s/he wanted an implementation-dependent,
bit-wise representation of y, then the nasty pointer casts may
accomplish that (depending on the sizes of the various data types).
Using reinterpret_cast would be preferred because it would signal
non-portable code.
Cheers! --M | 
December 2nd, 2005, 02:05 PM
| | | Re: Casting problem ?!
mlimber wrote:[color=blue]
> Mark wrote:[color=green]
> > i *think* he may have meant "note" that "number" has been initialized.
> > ie, elsewhere in his program that he has not shown.
> >
> > however, i wouldnt know whats in i... why cant you just do
> > i = long(y)? or (long)y?[/color]
>
> Perhaps because that was not the author's intent. If s/he wanted to
> truncate y to the nearest whole number, s/he would have done just what
> you said. If, however, s/he wanted an implementation-dependent,
> bit-wise representation of y, then the nasty pointer casts may
> accomplish that (depending on the sizes of the various data types).
> Using reinterpret_cast would be preferred because it would signal
> non-portable code.[/color]
Isn't the OP's code
float y;
float number;
y = number;
undefined behaviour is number is not initialised before being assigned
to y?
Gavin Deane | 
December 4th, 2005, 07:15 PM
| | | Re: Casting problem ?!
Carlos Martinez Garcia wrote:[color=blue]
> The first N bytes of y.
> N=sizeof(long)
>
> The content of the first N bytes depends on how your computer an OS
> represents floats in memory.
>[/color]
It might not be even that. There's no guarantee that float* can
be converted to long* with a cast. | | Thread Tools | Search this Thread | | | |
Posting Rules
| You may not post new threads You may not post replies You may not post attachments You may not edit your posts HTML code is Off | | | | | | What is Bytes?
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 220,840 network members.
|