C语言强制类型转换

1、无符号和有符号数之间的相互转换

    规则:对应的二进制代码不变,只是改变数的类型

#include<stdio.h>
int main()
{
	int a = 0xffffffff;
	unsigned b = a;
	printf("%d,%u\n",a,b);
	printf("%x,%x\n",a,b);
	return 0;
}

运行结果:
-1,4294967295
ffffffff,ffffffff

    由上例可知两个数的机器代码完全相同。

2、小字长与大字长的相互转换

    规则:长字长赋给短字长时采用截取低位的方式,短字长赋给长字长时采用符号位拓展的方式

#include<stdio.h>
int main()
{
	int a = -1, b = 1;
	short x = a, y = b;
	unsigned short u = a, v = b;
	printf("%d,%d\n",a,x);
	printf("%x,%hx\n",a,x);

	printf("%d,%d\n",b,y);
	printf("%x,%x\n",b,y);

	printf("%d,%u\n",a,u);
	printf("%x,%x\n",a,u);

	printf("%d,%u\n",b,v);
	printf("%x,%x\n",b,v);
	return 0;
}

运行结果:
-1,-1
ffffffff,ffff
1,1
1,1
-1,65535
ffffffff,ffff
1,1
1,1
#include<stdio.h>
int main()
{
	short a= -1, b = 1;
	int x = a, y = b;
	printf("%d,%d\n",x,a);
	printf("%x,%hx\n",x,a);

	printf("%d,%d\n",y,b);
	printf("%x,%x\n",y,b);

	unsigned short u = 0xffff;      //以下这段程序的输出比较有趣可以自己研究 
	short v = -1;
	printf("%x,%x",u,v);
	return 0;
}
运行结果:
-1,-1
ffffffff,ffff
1,1
1,1
ffff,ffffffff        //按理说short类型是16位怎么输出32位^..^??好像是跟参数传递时的压栈对齐有关!


你可能感兴趣的:(C语言强制类型转换)