因为朋友问到,因此整理了一份,若关于一些认识有错误还望指出......算法
● 若是一个运算符两边的运算数类型不一样,先要将其转换为相同的类型,即较低类型转换为较高类型,而后再参加运算,转换规则以下图所示。spa
double ←── float 高code
↑ 对象
long blog
↑
unsigned 编译
↑
int ←── char,short 低class
●简单的说强制类型转换有显式转换、隐式转换变量
好比:float
//好比 //此时int型的变量a就被强制转化为了float型,b不变 //此时a=3.000000 (float默认保留小数点后六位) main() { int a; int b=3; a=(float)b; }
再好比:程序
//再好比 //一个初学C会遇到的一个摄氏度转换的算法 // f为输入的温度,c为转化后的温度 main() { float c,f; scanf("%f",&f); c=5*(f-32)/9; } //根据优先级问题,先算括号里面的,即f-32,因为f是float型,则f-32也是float型 //5和9都是int型,5*(f-32)就是int型与float的乘积,此时的int会自动转换为float型 //同理,再除9,最终c为float型。 /************************************************************** 可是也会有下面的问题 有些同窗会把 c=5*(f-32)/9的公式改写成 c=5/9*(f-32); 即先用5/9再乘括号里的东西,这样的话输出结果会直接为0, 由于: 5 9均为int型,int/int=int 因此5/9=0 0乘任何数都为0 **************************************************************/
还有关于float、double输入输出时的类型转换
//关于float double输入输出时的类型转换 //好比: main() { float a; double b; scanf("%f",&a); printf("%f\n",a); scanf("%lf",&b); printf("%lf\n",b);//或者此行代码可改成 printf("%f",b); } /***************************************************************** 为何float型输入输出和double看似同样又不同呢? %f你们都知道是float的输入和输出 那%lf呢?这里是个必需要记住的地方, double型变量scanf里面必须是"%lf" 你能够把double理解为long float 可是为何double输出能够的%lf也能够是%f呢 就是至关于把%lf按照%f的类型输出了呗,通常状况下double输出用%f多些 *****************************************************************/
● 当较低类型的数据转换为较高类型时,通常只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。
如下为整理获得的一些 赋值中的类型转换 :
当赋值运算符两边的运算对象类型不一样时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换以下:
(1) 浮点型与整型
● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。 将整型值赋给浮点型变量,数值不变,只将形式改成浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换其实是强制的。
(2) 单、双精度浮点型
● 因为c语言中的浮点值老是用双精度表示的,因此float 型数据只是在尾部加0延长为doub1e型数据参加运算,而后直接赋值。doub1e型数据转换为float型时,经过截尾数来实现,截断前要进行四舍五入操做。
(3) char型与int型
● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。
● chr型数值赋给int型变量时, 一些编译程序无论其值大小都做正数处理,而另外一些编译程序在转换时,若char型数据值大于127,就做为负数处理。对于使用者来说,若是原来char型数据取正值,转换后仍为正值;若是原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不一样。
(4) int型与1ong型
● long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。
将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。
(5) 无符号整数 ● 将一个unsigned型数据赋给一个占据一样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。 ● 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时老是无符号的。