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

转载 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


举报

相关文章推荐

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

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

高斯消元低精度模板

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

大数(加、减、乘、除、低精度*大数)模板详解(C++)

一、大数四个基本操作 首先,我们来了解什么是大数,大数就是指用我们平常常见的高级语言(如:c 、c++)的基本数据类型的最大长度都装不下的数据,例如(12345678998765432112345...

golang:一个高性能低精度timer实现

在go自带的timer实现中,采用的是通常的最小堆的方式,具体可以参见这里。 最小堆能够提供很好的定时精度,但是,在实际情况中,我们并不需要这样高精度的定时器,譬如对于一个连接,如果它在2分钟以...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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