int main() { float a=1.0f; cout<<(int)a<<endl; cout<<(int&)a<<endl; cout<<((int)a==(int&)a)<<endl<<
intmain(){floata=1.0f;cout<<(int)a<<endl;cout<<(int&)a<<endl;cout<<((int)a==(int&)a)<...
int main()
{
float a=1.0f;
cout<<(int)a<<endl;
cout<<(int&)a<<endl;
cout<<((int)a==(int&)a)<<endl<<endl;
float b=0.0f;
cout<<(int)b<<endl;
cout<<(int&)b<<endl;
cout<<((int)b==(int&)b)<<endl<<endl;
char str1[]="abc";
char str2[]="abc";
const char str3[]="abc";
const char str4[]="abc";
const char *str5="abc";
const char *str6="abc";
cout<<&str1<<","<<&str2<<","<<&str3<<","<<&str4<<endl;
cout<<&str5<<","<<&str6<<endl;
cout<<(str1==str2)<<endl;
cout<<(str3==str4)<<endl;
cout<<(str5==str6)<<endl;
return 0;
}
怎么分析,这样的题目?? 请给出答案及理由/谢谢!! 展开
{
float a=1.0f;
cout<<(int)a<<endl;
cout<<(int&)a<<endl;
cout<<((int)a==(int&)a)<<endl<<endl;
float b=0.0f;
cout<<(int)b<<endl;
cout<<(int&)b<<endl;
cout<<((int)b==(int&)b)<<endl<<endl;
char str1[]="abc";
char str2[]="abc";
const char str3[]="abc";
const char str4[]="abc";
const char *str5="abc";
const char *str6="abc";
cout<<&str1<<","<<&str2<<","<<&str3<<","<<&str4<<endl;
cout<<&str5<<","<<&str6<<endl;
cout<<(str1==str2)<<endl;
cout<<(str3==str4)<<endl;
cout<<(str5==str6)<<endl;
return 0;
}
怎么分析,这样的题目?? 请给出答案及理由/谢谢!! 展开
3个回答
展开全部
在机器上运行一下,可以得到结果,输出的是1065353216,而不是1。这是因为浮点数在内存里和整数的存储方式不同,(int&)a相当于将该浮点数地址开始的sizeof(int)个字节当成int型的数据输出,因此这取决与float型数据在内存中的存储方式,而不是经过(int&)a显示转换的结果(1)。
因为float a=1.0f在内存中的表示都是3f800000,而浮点数和一般整数不一样,所以当(int&)a强制转换时,会把内存值3f800000当作int型输出,所以结果自然变为了1065353216(0x3f800000的十进制表示)。
因为float a=1.0f在内存中的表示都是3f800000,而浮点数和一般整数不一样,所以当(int&)a强制转换时,会把内存值3f800000当作int型输出,所以结果自然变为了1065353216(0x3f800000的十进制表示)。
展开全部
纯粹的输出语句哦
1 //强制转换后的值
1065353216 //见附录
0 //等式判断结果
0 //同上
0
1
0x0012FF74,0x0012FF70,0x0012FF6C,0x0012FF68 //地址的输出
0x0012FF64,0x0012FF60
0 //等式的判断
0
1
附录:
(int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型,并初始为1.0f,
但现在我要按int类型解释这段内存(也就是说a所在的内存地址中的数据本来是按float型存储表示的,你非要按int型来解释不可)。
1.0f 在内存中的存储为
0 011 1111 1 000 0000 0000 0000 0000 0000.
把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216
(int&)a 相当于
*(int*)&a
*(int*)(&a)
*((int*)&a)
1 //强制转换后的值
1065353216 //见附录
0 //等式判断结果
0 //同上
0
1
0x0012FF74,0x0012FF70,0x0012FF6C,0x0012FF68 //地址的输出
0x0012FF64,0x0012FF60
0 //等式的判断
0
1
附录:
(int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型,并初始为1.0f,
但现在我要按int类型解释这段内存(也就是说a所在的内存地址中的数据本来是按float型存储表示的,你非要按int型来解释不可)。
1.0f 在内存中的存储为
0 011 1111 1 000 0000 0000 0000 0000 0000.
把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216
(int&)a 相当于
*(int*)&a
*(int*)(&a)
*((int*)&a)
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后肯定输出的是m+1的值,即6
分清 m++ ++m , 它们作为单个表达式的值是不一样的,前者为m的值,后者为m+1的值,但运行它们之后的效果是一致的,即让 m = m + 1。
m-- 与 --m的区别也同上,不过是减1的区别
因此,第一个if
等价于 if(m > 5) (同时让m = m + 1),
判断完毕后m已经变为6,
因为条件不成立,所以走else分支,输出m--(即m的值6,别忘记了之后m要减1)
如果程序最后再来个让你输出m的值,则m = 5
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
分清 m++ ++m , 它们作为单个表达式的值是不一样的,前者为m的值,后者为m+1的值,但运行它们之后的效果是一致的,即让 m = m + 1。
m-- 与 --m的区别也同上,不过是减1的区别
因此,第一个if
等价于 if(m > 5) (同时让m = m + 1),
判断完毕后m已经变为6,
因为条件不成立,所以走else分支,输出m--(即m的值6,别忘记了之后m要减1)
如果程序最后再来个让你输出m的值,则m = 5
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询