标签:无法 double 出现 数据 字节 符号 数值 浮点 常量
1、运算时,自动类型转换
#include<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> #include<limits.h> 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(); }
标签:无法 double 出现 数据 字节 符号 数值 浮点 常量
原文地址:https://www.cnblogs.com/luoxuw/p/11220800.html