高精度低精度以及不同类型之间的转换

经验规则

1、  在32位机上,int型和unsignedint型都是32位的(4个字节)。

2、  enum会跟据最大值来决定类型,一般来说为int型,如果超出int型所能表示的范围,则用比int型大的最小类型来表示(unsigned int, long 或者unsigned long)

3、  关于类型的大小。一般用所能表示的数据范围来比较类型的大小,如char型<unsigned char型<short型...在表达式中,一般都是由小的类型向大的类型转换(强制类型转换除外)

4、  所有比int型小的数据类型(包括char,signedchar,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型;

5、  bool型转化为int型时,false转化为0,true转换为1;反过来所有的整数类型转化为bool时,0转化为false,其它非零值都转为true;

6、  如果表达式中混有unsignedshort和int型时,如果int型数据可以表示所有的unsigned short型的话,则将unsigned short类型的数据转换为int型,否则,unsigned short类型及int型都转换为unsigned int类型;

7、  unsigned int 与long类型的转换规律同3;

8、  如果表达式中既有int 又有unsignedint,则所有的int数据都被转化为unsigned int类型;

9、  始终要牢记内存中的表示,至于printf或者强制类型转换都只不过是对数的不同解释。如将有符号低精度数转换为高精度时,符号位向上扩展,如果是无符号低精度转换为高精度时,高位补0即可。如下程序所示。与此对应的是,如果是高精度转换为低精度时,那么只会装载高精度的相应低位,无论该数为signed 或是unsigned。

<span style="font-size:18px;">#include <stdio.h>

int main(void)
{
	unsigned char a = -1;
	char b = a;
	printf("%d %d\n", a, b); //输出255和-1
	
	unsigned int c = -1; //c的内存为FFFFFFFF
	int d = c;
	printf("%d %d\n", c, d); //输出-1和-1,只需要根据内存来看
}</span>

主要参考文献:http://weihe6666.iteye.com/blog/1055570

http://www.cnblogs.com/stonehat/archive/2011/10/14/2212141.html


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值