C语言各种类型之间转换详解

目录

      • 1. C基本类型变量
      • 2. 符号扩展
        • 2.1 规则一:
        • 2.2 规则二:
        • 2.3 规则三:
      • 3. 零扩展
      • 4. 长类型转换为短类型
      • 5. 自动类型转换
        • 5.1 赋值时的类型转换
        • 5.2 运算时的类型转换
      • 6. 有符号和无符号数的比较
      • 6. 无符号数回绕
      • 参考资料:

1. C基本类型变量

char/short/int/long/long long 以及其对应的无符号类型,short/double等。

基本类型 输出格式符
char %c, %d, %u
short %hd
int %d
long %ld
long long %lld
unsigned char %c, %d, %u
unsigned short %hu, %ho, %hx
unsigned int %u, %o, %x
unsigned long %lu, %lo, %lx
unsigned long long %llu, %llo, %llx
float %f
double %lf

在类型转换中,根据待转换的类型划分,可分为对有符号类型的转换无符号类型的转换,对应的转换规则为符号扩展零扩展

2. 符号扩展

即,对于要扩展的量为有符号数,扩展存储位数的方法。

2.1 规则一:

在新的高位字节使用当前当前最高有效位即符号位的值进行填充。

例1:

char a = 0xff;	// 有符号值为 -1,二进制为 1111 1111,其中最高位为符号位
short b = a;	// b的有符号值为 -1,在内存中存储的值为 1111 1111 1111 1111

例2:

char a = 1;		// 有符号值为 1,二进制位 0000 0001,其中最高位为符号位
short b = a;	// 有符号值为 1,在内存中存储的值为 0000 0000 0000 0001
2.2 规则二:

对于同一长度的数据类型中有符号与无符号数的相互转化,直接将内存中的数据赋给要转化的类型,数值大小会发生变化。

例3:

char a = 0xff;			// 有符号值为 -1,二进制为 1111 1111,其中最高位为符号位
unsigned char b = a;

你可能感兴趣的:(C/C++基础,c语言,数据类型)