### the state of variable in one expression

I thought that an operator performs a permanent change in a local variable. For example, if x is 00000000 00000000 00000000 00000011 (a 32 bit unsigned integer that resolves to value of 3) and p is 2, in the expression "return (x >> p) | (x << (s - p))", the right shift would permanently change x to 0 and the time we evaluate x again in "(x << (s - p))", x will already be 0. If that's the case, then this function doesn't make sense. This function makes it seem like that the >> and << operators do not change the value of x. It makes it seem like first we right shift x to 0 and then left shift by 20 bits to make x 11000000 00000000 00000000 00000000. If that's the case, then the function does exactly what it is supposed to do (rotate the bits). So which is it?

 123456789101112131415 unsigned int rightrot(unsigned int x, unsigned int n) { size_t s = sizeof(x) * CHAR_BIT; size_t p; if(n < s) p = n; else p = n % s; if((0 == x) || (0 == p)) return x; return (x >> p) | (x << (s - p)); }
>>= and <<= permanently change the value. >> and << never affect the value.
An operator doesn't "change" a variable/object/value. You could think of it "returning" the result of the operation. I can tell you what my house would look like if I painted it red, but talking about it doesn't actually paint my house red.
Topic archived. No new replies allowed.