基本数据类型与隐式转换
2016-04-20 20:04
204 查看
1,基本数据类型;
基本数据类型包括数值类型和字符类型(char),而数据类型又包括整型和浮点型,然后整型包括短整型(short),整型(int)和长整型(long),浮点型又包括双精度(double)和单精度(float)。一共6种,对于这些有
(1)16位平台
char 1个字节8位
short 2个字节16位
int 2个字节16位
long 4个字节32位
指针 2个字节16位
(2)32位平台
char 1个字节8位
short 2个字节16位
int 4个字节32位
long 4个字节32位
long long 8个字节64位
指针 4个字节32位
(3)64位平台
char 1个字节
short 2个字节
int 4个字节
long 8个字节(区别)
long long 8个字节
指针 8个字节(区别)
2.对于数据类型的隐式转换:
1,算术运算;
首先,对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:如果运算的数中有double型或float型,则其他类型数据均转换成double类型进行运算,因为double比float大。如果运算数中最长的类型为long型.毕竟long是最长的。如果运算数中最长类型为int型,则char型也转换成int型进行运算,这里需要提示下的就是串的第一个元素可以进行加减运算。
然后包含long与unsigned int,32位机器上都是4字节,所以均转换为unsigned long,包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。比如将-1赋给8位的unsigned char,呢么结果就是255(-1对256取模后的值)。unsigned char取值范围0~255。注意:在进行自动类型转换的时候,如果原来的数是无符号数,那么在扩展的时候,高位填充的是0;如果是有符号数,那么高位填充的时符号位!
2.赋值转换
进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。这个简单说明,int a = 1;double b = 0.1;则a = b;最后a输出是0;
3.输出转换
在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char型转 换成int型输出,输出的是ascii码。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则 转换时将出错。比如,long a=80000; printf("%d",a);运行结果为14464,因为int型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即进行如下取余运算:(80000-32768)-32768=14464;然后对于整型与浮点型之间的转换输出就会出错,因为不会转换。
基本数据类型包括数值类型和字符类型(char),而数据类型又包括整型和浮点型,然后整型包括短整型(short),整型(int)和长整型(long),浮点型又包括双精度(double)和单精度(float)。一共6种,对于这些有
(1)16位平台
char 1个字节8位
short 2个字节16位
int 2个字节16位
long 4个字节32位
指针 2个字节16位
(2)32位平台
char 1个字节8位
short 2个字节16位
int 4个字节32位
long 4个字节32位
long long 8个字节64位
指针 4个字节32位
(3)64位平台
char 1个字节
short 2个字节
int 4个字节
long 8个字节(区别)
long long 8个字节
指针 8个字节(区别)
2.对于数据类型的隐式转换:
1,算术运算;
首先,对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:如果运算的数中有double型或float型,则其他类型数据均转换成double类型进行运算,因为double比float大。如果运算数中最长的类型为long型.毕竟long是最长的。如果运算数中最长类型为int型,则char型也转换成int型进行运算,这里需要提示下的就是串的第一个元素可以进行加减运算。
然后包含long与unsigned int,32位机器上都是4字节,所以均转换为unsigned long,包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。比如将-1赋给8位的unsigned char,呢么结果就是255(-1对256取模后的值)。unsigned char取值范围0~255。注意:在进行自动类型转换的时候,如果原来的数是无符号数,那么在扩展的时候,高位填充的是0;如果是有符号数,那么高位填充的时符号位!
2.赋值转换
进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。这个简单说明,int a = 1;double b = 0.1;则a = b;最后a输出是0;
3.输出转换
在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char型转 换成int型输出,输出的是ascii码。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则 转换时将出错。比如,long a=80000; printf("%d",a);运行结果为14464,因为int型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即进行如下取余运算:(80000-32768)-32768=14464;然后对于整型与浮点型之间的转换输出就会出错,因为不会转换。
相关文章推荐
- 站立会议2
- 团队冲刺站立会议02
- Linux学习系列-轮询函数
- 类 ApplicationInfo详解
- 如何删除 excel 单元格内的换行符
- mysql+C#实战六:调用存储过程
- Linux内核总结
- xpath的文本获取
- POJ 2686 Traveling by Stagecoach
- Developers--api guides-Servieces
- xpath的文本获取
- ubuntu基本操作
- 2015
- pfsense开源安全软件
- Linux怎么搜索jar包里的内容
- 文章标题
- CodeForces 615C Running Track
- CEP的一个简单理解
- matlab 去除画图两段空白
- <Android 应用 之路> 简易贪吃蛇