446,300 Members | 1,331 Online
Need help? Post your question and get tips & solutions from a community of 446,300 IT Pros & Developers. It's quick & easy.

# What does that operation mean?

 P: n/a Hi, can anyone tell me what the following means? x is a float, and j an integer. What value is in j afterwards? j=0; j=(int)(x)&512; Now if I use 128 instead of 512 what's the difference? Thanks, Al Sep 26 '06 #1
7 Replies

 P: n/a Al wrote: can anyone tell me what the following means? You could try reading your C book, rather than asking for help. x is a float, and j an integer. What value is in j afterwards? j=0; j=(int)(x)&512; We don't know what float value `x` has, so we don't know what int value `(int)(x)` has (this could be written as `(int) x`), so we don't know what value `(int) x & 512` has, except that it's either 0 or 512, because of the way bitwise-& works. There's no point in assigning `0` to `j` and then assigning it the other value. Don't post incomplete fragments. Now if I use 128 instead of 512 what's the difference? The answer's either 0 or 128. -- Chris "all to pieces, bits and pieces" Dollin I'm full of sweetness and light. And I'm /keeping/ it. Sep 26 '06 #2

 P: n/a Al posted: j=(int)(x)&512; The value of the expression, "x", is converted to int, and then BitwiseAND'ed with the integer value 512. -- Frederick Gotham Sep 26 '06 #3

 P: n/a On Tue, 26 Sep 2006 10:08:25 +0100, Chris Dollin wrote in comp.lang.c: Al wrote: can anyone tell me what the following means? You could try reading your C book, rather than asking for help. x is a float, and j an integer. What value is in j afterwards? j=0; j=(int)(x)&512; We don't know what float value `x` has, so we don't know what int value `(int)(x)` has (this could be written as `(int) x`), so we don't know what value `(int) x & 512` has, except that it's either 0 or 512, because of the way bitwise-& works. No, it's undefined, and anything can happen. Accessing the value of an uninitialized float produces the undefined behavior. Attempting to cast to int and performing a bit-wise and has nothing to do with it, the wheels have already fallen off before you get that far. The answer's either 0 or 128. There is no answer here, either, since the behavior is still undefined. -- Jack Klein Home: http://JK-Technology.Com FAQs for comp.lang.c http://c-faq.com/ comp.lang.c++ http://www.parashift.com/c++-faq-lite/ alt.comp.lang.learn.c-c++ http://www.contrib.andrew.cmu.edu/~a...FAQ-acllc.html Sep 26 '06 #4

 P: n/a On Tue, 26 Sep 2006 20:54:15 GMT, Frederick Gotham

 P: n/a Chris Dollin wrote: Al wrote: x is a float, and j an integer. What value is in j afterwards? j=0; j=(int)(x)&512; We don't know what float value `x` has, so we don't know what int value `(int)(x)` has (this could be written as `(int) x`), so we don't know what value `(int) x & 512` has, except that it's either 0 or 512, because of the way bitwise-& works. If 'x' has a value outside the range of int, then the behaviour is undefined. Otherwise it is 0 or 512 :) Jack Klein wrote: No, it's undefined, and anything can happen. Accessing the value of an uninitialized float produces the undefined behavior. What makes you think x is uninitialized? Sep 27 '06 #6

 P: n/a Jack Klein wrote: On Tue, 26 Sep 2006 10:08:25 +0100, Chris Dollin wrote in comp.lang.c: x is a float, and j an integer. What value is in j afterwards? j=0; j=(int)(x)&512; We don't know what float value `x` has, so we don't know whatint value `(int)(x)` has (this could be written as `(int) x`),so we don't know what value `(int) x & 512` has, except thatit's either 0 or 512, because of the way bitwise-& works. No, it's undefined, and anything can happen. Accessing the value of an uninitialized float produces the undefined behavior. Good catch. I was rather assuming that his `x` had been given /a/ value somewhere: I should have said so. (I did wonder if the irrelevant `j=0;` was a typo for `x=0;`.) -- Chris "`x` marks the nasal demon" Dollin RIP John M. Ford (April 10, 1957 -- September 24, 2006) Sep 27 '06 #7

 P: n/a In article , Jack Klein On Tue, 26 Sep 2006 20:54:15 GMT, Frederick GothamAl posted: j=(int)(x)&512; The value of the expression, "x", is converted to int, and then BitwiseAND'edwith the integer value 512. Accessing the uninitialized value of the float x causes undefinedbehavior. What happens after that doesn't matter, at least not here. What makes you think that x is uninitialized? Just because you can't see it in the posted fragment, doesn't mean you can assume that the posted fragment is the entire program. In fact, we can be sure that the posted fragment is *not* the entire program, since it would not compile as is. Sep 30 '06 #8

### This discussion thread is closed

Replies have been disabled for this discussion.