(c语言)类型转换

在C语言中,通常会在数据类型转换方面出现问题,以下对数据类型转换进行说明。
先看一段代码,如下:

int main()
{
	char a = -1;
	char b = 255;   //char类型取值范围:-128~127   255二进制:1111 1111即为-1
	unsigned char c = -1;   //无符号char类型取值范围0~255,1111 1111即为255
	unsigned char d = 255;
	unsigned int n = -1;     //11111111111111111111111111111111即为2^32 - 1
	
	int e = a;      //-1      char->int
	int f = b;       // -1      char->int
	int g = c;      //255    unsigned  char->int
	int h = d;      //255    unsigned  char->int
	printf("%d,%d,%d,%d\n",e,f,g,h);
	
	int e = -1;      //-1
	int f = 255;    //255
	printf("%d,%d\n",e,f);
	
	return 0;
}

如上所示代码,为不同数据类型之间的转换。其中有符号和无符号的差别以及宽窄类型差别,转换规则不同。

数据类型之间默认转换规则:

  1.从窄的类型转成宽类型;
  2.同类型的无符号比有符号宽(考的多)
  3.整型起(数字默认为int,浮点默认为double)  
     ( 其中同级别的数据类型遵循规则:     unsigned   int   >   int    )
     ( 只要是二进制左边补数据都是补符号位,无符号则补0,右边补数据都是补0  )

  4.窄类型转宽类型:左边统一补符号位,无符号则补0

在这里插入图片描述

//应用
int main()
{
	char a = 10;          //0000 1010
	int b = a;       //10,(32位)000000000000000000000000 0000 1010 补符号位
	
	 a = -1;          //-1   1111 1111
     b = a;          //-1 (32位) 111111111111111111111111 11111111  补符号位

	unsigned char c = 10;       //0000 1010
	 b = c;            //10   

	c = 255;      //255   1111 1111
	b = c;         //255 (32位)000000000000000000000000 1111 1111 无符号补0

	return 0;
}

如下是较为复杂的数据类型转换。 转换规则遵循规则4以及同级别类型转换规则。

int main()
{
	char i = 10;
	int j = 2000;
	j = i;
	i = 2000;

	printf("%d\n",sizeof('a'+1));

	unsigned short a = 10;
	unsigned int b = 10;
	if(a > -1)           //   unsigned short > int -> (int > int)
	{
		printf("a>-1\n");
	}
	else
	{
		printf("a<-1\n");
	}
	if(b > -1)      //unsigned int > int->(unsigned int > unsigned int)
	{
		printf("b>-1\n");
	}
	else
	{
		printf("b<-1\n");
	}
	return 0;
}

运行结果如下:
在这里插入图片描述
以上为数据类型转换的想法,有问题还请指教。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值