Re: union to get parts of integer

Glynn Clements <[email protected]> Tue, 21 Dec 2010 16:22:50 +0000
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
Tim Walberg wrote:

> >>	((char *)&i)[0].
> >>	
> >>	However, are you sure that you need this?  Don't you need "(i & 255)",
> >>	"((i >> 8) & 255)", etc. instead?
> 
> It's likely that either the union or direct pointer expressions yield
> more efficient code, as they can probably be compiled to direct byte-width
> load/store instructions, rather than shifts and logical ands... However,
> if the code's not in a critical path for performance, it probably won't
> matter. And on some architectures, there may not be byte-width operations,
> I guess...

The cast/union versions will give different results depending upon the
CPU's byte order. The shift/mask versions will give the same results
regardless of byte order.

-- 
Glynn Clements <[email protected]>