I'm no expert but I know this is nothing to do with the << operator. It is to with the order in which the line is assessed by the compiler, and the order that you increment x and y in your cout line.
if x=4:
cout << x++; would output 4, then raise the value of x to 5 afterwards.
cout << ++x; would raise the value of x to 5, then output 5.
I don't feel I did a great job of explaining that but someone else is bound to come along and do a better job =P
That depends on 2 things. First on your compiler, second on the order the arguments are pushed in your cout function. Depending on the amount of precompiled data you get different results.
MSVC for example will give you 54, 56 as a result.
This is because of the defined scope of x&y and so the compiler will precompute the values.
Even then 64, 56 is kinda strange.