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?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.