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

转载 2015年11月17日 19:07:19

经验规则

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


相关文章推荐

uva 10494 If We Were a Child Again(高精度与低精度求模和商)

If We Were a Child Again Input: standard input Output: standard output Time Limit: 7 seconds   “...

L1-046 整除光棍<高精度除低精度>

L1-046. 整除光棍 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 翁恺 这...

Java中不同数值类型间转换与计算精度丢失问题

在Java编程过程中,经常会涉及到不同数值类型之间的转换以及计算精度丢失的问题,例如:int m=6; float n=3.5f; double p=2.75d; System.out.pri...

002不同类型数据的精度

  • 2007年11月24日 11:55
  • 300B
  • 下载

高斯消元低精度模板

模板如下,复杂度O(n^3) /* 高斯消元低精度版 @挠头小熊熊 * * 使用说明: * A为大小为n的增广矩阵,A[i][n]是第i个方程右边的常数bi * 运行后A[i][...
  • Frosero
  • Frosero
  • 2015年10月05日 17:05
  • 301

低精度量化的通信

  • 2015年03月26日 09:32
  • 377KB
  • 下载

利用线程的随机调度特性和sleep库函数的低精度实现字符的伪随机排序

这是一道阿里的笔试题。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高精度低精度以及不同类型之间的转换
举报原因:
原因补充:

(最多只允许输入30个字)