1.交换两个变量的值,不使用第三个变量,即a=3, b=5, 交换后b=3, a=5。
unsigned char a = 3, b = 5;
a = a + b;
b = a - b;
a = a - b;
或者
a = a ^ b;
b = a ^ b;
a = a ^ b;
如果写成函数:
void swap(int* a, int *b)
{
*a = *a ^ *b;
*b = *b ^ *a;
*a = *a ^ *b;
printf("In %s:a=%d,b=%d\n",__FUNCTION__,*a,*b);
}
2.如何判别一个数是unsigned?
#define issignal(x) ((x>=0 && ~x>=0) ? 1:0) //为1是无符号 为0有符号
备注:可以直接记住。
signed最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。
unsigned都是正数,而signed有正数有负数。
3.写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
int checkCPU()
{
union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}