C语言数据类型的转换

C语言不同类型的数据转换及类型说明

类型转化规则

C语言数据类型的转换_第1张图片

  1. 若参与运算等式两边类型不同,需要转化成相同类型,再进行计算。

  2. 转化按数据长度增加的方向进行,以保证精度不降低。如int型和long型参与运算时,先都转换成long型,再运算。
    a.若两种类型的字节数不同,则向字节数高的转化
    b.若字节数相同,符号不相同,则向无符号类型转化。

  3. 所有的浮点数运算都是以双精度进行的,即便是两个float单精度运算量的表达式,也要转化成double类型进行运算。

  4. char型和short型参与运算时,必须先转化成int类型

  5. 赋值运算中,当等式两边数据类型不同时,等式右边的数据量将转换为等式左边的数据量。
    如果右边的数据类型长度比左边短,则右边数据会有一部分丢失,且采用四舍五入的方式。
    注意:把浮点数赋值给整数类型,会去掉该数的小数部位

int i;
i=3.79     //i=3
i=4/3     //i=1
i=1/2    //i=0
  1. 强制类型转换
    一般格式:(类型名)(表达式)
    强制转换是为了避免溢出,且类型名属于一级运算符,其优先级强于二级运算符所以下面的强制转换是错误的
long i;
int j=1000;
i=(long)(j*j);                                   //溢出在转化之前

类型说明

  1. 符号数,当数为0或者正数,符号位(最左边的位)为0,当数为负数,符号位为1。无符号数,最左边的位看成数值部分,默认情况下,C语言中的整形变量都是有符号的,无符号主要用于系统编程,低级的,与机器相关的应用,运用的时候需要将之申明为unsigned类型。
  2. 整型常量的书写形式
进制 出现数字 规则
十进制 0~9 不能以0开头
八进制 0~7 必须以0开头
十六进制 数字0~9,字母a-f 必须以OX开头,且字母可大写可小写
  1. 整数溢出的情况
    有符号整数溢出时,程序行为是为定义的,无符号整数溢出时,程序结果是有定义的,正确答案是对2的n次方取模(n是用于储存结果的位数)
    例: 对无符号的16位数65535加1,结果为0

  2. 浮点数常量是会有多种表示方法的。
    例如:表示数57.0的有效方式:
    57.0 57. 57.0e0 57E0 5.7e1 5.7e+1 .57e2 570.e-1

  3. 默认情况下,浮点常量都以双精度数的形式存储, 为了说明常量必须以long double格式存储,要在常量的末尾处加上字母L(或l)(如57.0L)。

  4. 字符类型
    在C语言中处理字符非常简单,因为C语言会按小整数的方式处理字符。在ASCII码中,字符的取值范围是00000001111111,这个可以看成0~127的整数,符‘a’的值为97,‘A’的值为65,‘0’的值为48,而‘’的值为320。
    当出现字符数,C语言只是处理它所对应的整数值。

char ch;
int i;
i='a' ;   //i=97
ch=65;   //ch为a
ch=ch+1;        //ch为B
ch++;  //ch为C

字符操作
a.我们可以像数那样对字符进行操作。
例:把读入的字符由小写换成大写

char ch;
while(ch=getchar()){
if(ch>'a'||ch<'z'){
ch=ch-'a'+'A';
}
}

在C语言中字符拥有与数相同的属性。
另外一种转换方法是利用函数toupper

#include 
char ch;
ch=toupper(ch);

类型定义的优点是便于理解

typedef float Dollars
Dollars carsh_in,carsh_out;   //比用float好理解

你可能感兴趣的:(C语言)