共用体
typedef union
{
unsigned short number;
unsigned char data[2];
}strudent;
void fun_union()
{
strudent jack;
jack.number=-2;
printf("sizeof(studend)=%ld,data[0]=%#x,data[1]=%#X\n",sizeof(jack),jack.data[0],jack.data[1]);
}
打印:sizeof(studend)=2,data[0]=0xfe,data[1]=0XFF,打印出0XFF,暂时没有理解(已理解),应该打印出0才对啊!如果jack.number=2;那么打印:sizeof(studend)=2,data[0]=0x2,data[1]=0,这个能理解。
分析data[1]=0XFF原因:
-2是unsigned short类型,占用2个字节:
[-2] = [1000 0000 0000 0010]原 = [1111 1111 1111 1101]反 = [1111 1111 1111 1110]补
数据在存储的补码形式表示为:0xfffe,在小端模式下,data[0]取低8位就是0xfe,data[1]取高8位就是0xff。
求数能值的二进制中1的位数
通过&实现
int fun_get_bin1_num(int x)
{
int count;
while(x)
{
count++;
x=x&(x-1);
}
return count;
}
删除字符串所有空格
不用额外的空间实现
void fun_del_space(char *pStr)
{
char *pTmp = pStr;
while (*pStr != '\0')
{
if (*pStr != ' ')
{
*pTmp++ = *pStr;
}
++pStr;
}
*pTmp = '\0';
}
宏定义实现swap(x,y)
#define swap(x,y) x=x+y;y=x-y;x=x-y;//算术算法
#define swap(x,y) a=a^b;b=a^b;a=a^b; or a^=b^=a;//异或,只能对int,char类型