有关(int&)和(int)的区别
2012-04-19 16:34
288 查看
http://www.cnblogs.com/from20100719/articles/1845238.html
先看一段程序
?
这段程序的输出会是什么呢?
显然(int)a是将a的值转换成int型
&a则是a的内存地址的二进制表示
那么(int&)a是什么呢?是否等于(int)&a呢?
【注意:(int)&a实际是将二进制的地址转化成int型】
我们看一下程序运行的结果:
![](http://images.cnblogs.com/cnblogs_com/from20100719/WindowsLiveWriter/intint_112CE/image_thumb.png)
(int&)a的值很古怪,1065353216
不妨尝试输出(int)&a,就会发现(int&)a≠(int)&a
实际上,(int&a)是与*((int*)&a)等价的,意思都是将&a这个地址上的32位看成int型,即使存储在这里的可能不是int型数据
(int&)a为什么会是1065353216呢?
这和浮点数在内存中的存储格式有关,float 1.0在内存中存储为(按IEEE754规定):
符号位 阶(8位) 尾数(23位)
0 01111111 000 0000000000 0000000000
于是将其看做int型数值的话
00111111100000000000000000000000(2) = 1065353216(10)
这正是程序输出的结果
小结:
(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1。
(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)。
因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。
对b的两种转换意义同上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。
~The end~
先看一段程序
?
显然(int)a是将a的值转换成int型
&a则是a的内存地址的二进制表示
那么(int&)a是什么呢?是否等于(int)&a呢?
【注意:(int)&a实际是将二进制的地址转化成int型】
我们看一下程序运行的结果:
![](http://images.cnblogs.com/cnblogs_com/from20100719/WindowsLiveWriter/intint_112CE/image_thumb.png)
(int&)a的值很古怪,1065353216
不妨尝试输出(int)&a,就会发现(int&)a≠(int)&a
实际上,(int&a)是与*((int*)&a)等价的,意思都是将&a这个地址上的32位看成int型,即使存储在这里的可能不是int型数据
(int&)a为什么会是1065353216呢?
这和浮点数在内存中的存储格式有关,float 1.0在内存中存储为(按IEEE754规定):
符号位 阶(8位) 尾数(23位)
0 01111111 000 0000000000 0000000000
于是将其看做int型数值的话
00111111100000000000000000000000(2) = 1065353216(10)
这正是程序输出的结果
小结:
(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1。
(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)。
因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。
对b的两种转换意义同上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。
~The end~
相关文章推荐
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- 有关(int&)和(int)的区别
- int operator[](int pos)const;与int& operator[](int pos);的区别
- (int)a、&a、(int)&a、(int&)a的区别
- int *&p与int *P的区别
- void f(int(&p)[3]){} 和void f(int(*p)[3]){}的区别
- int *pa(指针)和int *&pa(指针的引用)的区别
- JAVA中Double与double(Integer&int)之间的区别
- (int)a、&a、(int)&a、(int&)a的区别
- Mysql数据库int(1)和tinyint(1)的区别&&扩展阅读
- [C/C++](int)a,&a,(int)&a,(int&)a区别小结
- (int)a &a (int)&a (int&)a的区别