Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5142555
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: C/C++

2010-05-31 23:32:05

在嵌入式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;

阅读(730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~