c语言 转换,C语言类型转换

1、运算时,自动类型转换

#include

void main(){

char c = 'a';

short s = 1;

int i = 10;

float f = 100.00;

double d = 1000.0000;

//运算时,自动类型转换

printf("\n 字节%d,值为 %d",sizeof(c+s),c+s); //默认char =>int short => int 字节数是4

printf("\n 字节%d,值为 %d", sizeof(c + i),c + i);//默认char => int 字节数是4

printf("\n 字节%d,值为 %f", sizeof(s + f),s + f); 默认short =>float 字节数是4

printf("\n 字节%d,值为 %f", sizeof(i + f),i + f); //默认int =>float 字节数是4

printf("\n 字节%d,值为 %f", sizeof(i + d),i + d); //默认int =>double 字节数是8

printf("\n 字节%d,值为 %f",sizeof(f + d),f + d);//默认int =>double 字节数是8

//数值比较大时,有符号回向无符号转换

unsigned int ui = 2147483647u; //u表示无符号常量 有符号范围是0-2147483647

printf("\n 字节%d,无符号值为 %u,有符号值为%d", sizeof(i + ui), i + ui, i + ui);

//字节4,无符号值为 2147483657,有符号值为-2147483639 ,无符号可以正常显示,有符号越界了。

//%d 有符号输出十进制整数 对应于int

//%u 无符号输出十进制整数 对应于 unsigned int

getchar();

}

2、赋值时,自动类型转换

#include

void main(){

//赋值时,自动类型转换

char c = 'a'; //在赋值的时候已经进行的自动类型转换,成了char类型 int =>char

short s = 1; //在赋值的时候已经进行的自动类型转换,成了short类型 int =>short

int i = 10.0; //在赋值的时候已经进行的自动类型转换,成了int类型 double =>int

float f = 100.00; //在赋值的时候已经进行的自动类型转换,成了float类型 double =>float

double d = 1000.0000;

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

//'a'字符保存的是它的ASCII码值,65,是整数类型,4个字节;而c在赋值的时候已经进行的自动类型转换,成了char类型,1个字节

printf("%d, %d\n", sizeof(1), sizeof(s));

//1是整数类型,4个字节;而s在赋值的时候已经进行的自动类型转换,成了short类型,2个字节

printf("%d, %d\n", sizeof(10.0), sizeof(i));

//10.0是double类型,8个字节;而i在赋值的时候已经进行的自动类型转换,成了int类型,4个字节

printf("%d, %d\n", sizeof(100.00), sizeof(f));

//100.00是double类型,8个字节;而c在赋值的时候已经进行的自动类型转换,成了float类型,4个字节

printf("%d, %d\n", sizeof(1000.00), sizeof(d)); //

getchar();

}

3、强制类型转换

#include

void main(){

printf("%d\n",1.0); //%d输出整数,因为1.0是double类型,把double类型按照整数类型解析,所以无法输出1.0

printf("%d\n", (int)1.0); //%d输出整数,强制类型转换成int, 输出1

printf("%f\n", 1); //%f输出浮点数,因为1是int类型的,所以无法输出1

printf("%f\n", (float)1); //%d输出浮点数,强制类型转换成float, 输出1.000

int i = 3.6; //double的3.6赋值给int 类型的变量会出现精度损失

printf("%d\n", i); //输出3

getchar();

}

4、数据溢出

#include

#include

void main(){

unsigned char ch = 255;

printf("%d\n",UCHAR_MAX);

int i = 256;

ch = i; //赋值越界

printf("%d\n",ch); //输出0

/*

解释:

因为 char 是8位

255 1111 1111

+1

1 0000 0000

而char只有8个位的存储空间,所以截取后8位的0,前面的进位1就丢掉,溢出了,所以输出0

*/

getchar();

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值