C语言-共用体

共用体

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';
}

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/82749386