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]>