C++ 输出char问题
C++输出char问题cout<<('A'+'C')/2<<endl;//把AC转为ASCII码,输出66cout<<static_case<char>(('A'+'C'...
C++ 输出char问题cout<< ('A'+'C')/2<<endl; //把A C转为ASCII码,输出66
cout<<static_case<char>( ('A'+'C')/2)<<endl; //为什麼会输出-62 而不是B? 展开
cout<<static_case<char>( ('A'+'C')/2)<<endl; //为什麼会输出-62 而不是B? 展开
3个回答
展开全部
如果你写的是
cout<<static_case<char>('A'+'C')/2<<endl;
输出-62我并不觉得奇怪。
因为
'A'的ascii码是65,'C'是67。相加是132。
'A'+'C'的“结果类型”是int,因此它的十六进制是0x00000084,最高位是0表示正数!(你可以求sizeof('A'+'C')验证一下,是4,int的大小)
3. static_case<char>('A'+'C')相当于static_case<char>(132)。
4. (char)132的十六进制是0x84,二进制是1000 0100,最高位符号位是1表示这是个负数!
5. 用8位补码解析0x84,得到的结果是-62!
用下面的告诉你结果:
#include <iostream>
using namespace std;
int main() {
cout << "('A'+'C') = " << ('A' + 'C') ;
printf(" = 0x%08x\n", ('A' + 'C'));
cout << "(int)(char)('A'+'C') = " << (int)(char)('A' + 'C');
printf(" = 0x%08x\n", (int)(char)('A' + 'C'));
return 1;
}
/*
输出:
('A'+'C') = 132 = 0x00000084
(int)(char)('A'+'C') = -124 = 0xffffff84
*/
最后再补充一句,为了不让'A'+'C'的结果“溢出”,导致char('A'+'C')/2得到负数,更好的办法是char('A') + char('C'-'A')/2。
这两种做法虽然数学上是等价的,但是第一种方法的“中间计算过程”存在“溢出”,导致结果不是想要的。
PS:第二种做法在做二分查找和快速排序的时候也都会用到!
展开全部
cout<<(char)(('A'+'C')/2)<<endl;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我这输出B,也许就是你编译器有bug
追问
你用什麼编译器?我在Mac Xcode 和一些网上编译器都不行
追答
VC
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询