两则学习笔记:联合体union和异或^的妙用
时间:2010-05-31 来源:sinodragon21
在嵌入式C精华中看到的,在此作为学习笔记,记录一下。
1. 用联合体判断系统CPU是little-endian还是big-endian
0x00000001在系统CPU为little- endian时在内存中的存放是 01 00 00 00 ,而当系统CPU为big-endian时在内存中的存放是 00 00 00 01.下面的函数返回值为1时,表示CPU是little-endian,反之则为big-endian。
int checkCPU()
{
union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}
在linux系统源代码中是用如下方法来实现的:
static union { char c[4]; unsigned long l; } endian_test = { { ''l'', ''?'', ''?'', ''b'' } };
#define ENDIANNESS ((char)endian_test.l)
2. 用异或^实现交换两个同类型变量的值
int a=1;
int b=2;
a = a^b;
b = a^b;
a = a^b;
相关阅读 更多 +