C语言基础之数据类型和数据类型转化

1.数据类型
32位下各数据类型所占字节数
char : 1 有符号数范围 -128 - 127 无符号数范围 0-255;
short : 2 有符号数范围 -32768- 32767 无符号数范围 0-65535
float : 4;
double: 4:
int : 4;
long: 4;
long long : 8:
void *:4;

64位下各数据类型所占字节数
char : 1:
short : 2;
float : 4:
double: 8;
int :4;
long : 8:
long long : 8;
void 8*: 8;
2.数据类型转化
要扩展量为有符号,不管最终最终要扩展成有符号还是无符号,都遵循符号扩展;
要扩展量为无符号,不管最终最终要扩展成有符号还是无符号,都遵循零扩展;

两字节时,0xffff有符号时表示 -1,无符号时表示极限最大值 65535
a: 短数据类型扩展成长数据类型 :遵循位扩展
b: 长数据类型缩减为短数据类型: 截断

  char a = 0xff; // a为 -1 有符号量  二进制 1111 1111
  unsigned short b = a; // a进行符号扩展b 高位补1  即 1111 1111 1111 1111;
  short c = a; // 1111 1111 1111 1111  
  printf("a= %d\n",a);  //  -1
  printf("b = %u\n",b); // 65535
  printf("c = %d\n",c); // -1
  unsigned char a = 0xff;// 255 无符号量 1111 1111
  unsigned short b = a;// 零扩展  0000 0000 1111 1111 
  short c = a; // 0000 0000 1111  1111  
  printf("a= %d\n",a);  //  255
  printf("b = %u\n",b); //  255
  printf("c = %d\n",c); //  255

1)要扩展的数据类型是有符号数 , 短数据的符号位填充到长数据类型高字节

  char x = 1000 1001b;
  short y = x; // y  1111 1111  1000 1001b

  char x = 0000 1001b;
  short y = x; // y  0000 0000  1000 1001b
  

2)要扩展的数据类型是无符号数 短数据的符号位填充到长数据类型高字节 补0

	unsigned char x = 1001 1001 b;
	short y = x; // y 0000 0000 1001 1001b
	
	unsigned char x = 0000 1001 b;
	short y = x; // y 0000 0000 0000 1001b

2.长数据类型缩减为短数据类型
如果长数据类型高位全为1或全为0,则会直接截取低字节赋给短数据类型;

3.有符号数和无符号数比较
自动将有符号数转为无符号比

	int a = -1; // a转成无符号 超大数 a> b
	unsigned int b = 1;
	unsigned short  i = 65535;
	printf("%d\n",i); // 65535  无符号short 转 有符号int  补0  0000 0000 0000 0000 1111 1111 1111 1111 就是65535
	signed short i = 65535; // 有符号short 转 有符号int  补1 1111 1111 1111 1111 1111 1111 1111 1111 为 -1
	printf("%d\n",i); // -1

short + short 相加会转成 int 类型 int 和 int 相加不会转成 long long int 会溢出;

你可能感兴趣的:(c语言,开发语言)