turns out the second is about 5% faster than the first.
Though I imagine getting the next odd number with (number | 1) is probably faster than many other methods. Just saying I am amazed by the unfathomable speed of my computer =)
The reason why passing by reference is sometimes faster than passing by value is because you avoid an object copy. A reference is a very small type, like a pointer, so copying it is cheap.
However, references aren't really smaller than other basic types (like int). So passing a reference doesn't save you on any copying. Passing an int by reference and an int by value both involves about the same amount of copying. They're both very cheap.
In addition, references can require an indirection (like dereferencing a pointer)... which is an additional memory access. Therefore passing by reference can actually be slower for basic types (and other small types).