关于char 到int 的转换问题

WangBr 2012-11-24 06:33:31
#include <iostream>
using namespace std;
int main()
{
char a=0xf7;
int i=a;
cout<<hex<<i;
}

输出结果为什么是:fffffff7
...全文
253 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-11-24
  • 打赏
  • 举报
回复
整型提升(integer promotion)规则如此规定的,详情查阅c或c++规范文档。
zk3389 2012-11-24
  • 打赏
  • 举报
回复
你写的是带符号的,0xf7肯定是负数,你要是扩展成0x00f7就是正数了,这不合理!
MisterK 2012-11-24
  • 打赏
  • 举报
回复
合理的解释是有符号型数据向上转换时会将符号位考虑进来, 所以char a = 0xf7; int i=a;之后i会将符号位补充保证转换后的值是一致的。
yisikaipu 2012-11-24
  • 打赏
  • 举报
回复
引用 4 楼 smallnat 的回复:
没有指明unsigned的char/int都是带符号的。
错! char与int不同 signed int 就是 int 但是,标准上说 char // 有无符号由编译器定 signed char // 有符号 unsigned char // 无符号 是三种不同的类型 比如VS的/J编译选项就是设定char是否有符号的 http://msdn.microsoft.com/en-us/library/0d294k5z(v=vs.90).aspx
hznat 2012-11-24
  • 打赏
  • 举报
回复
没有指明unsigned的char/int都是带符号的。
yisikaipu 2012-11-24
  • 打赏
  • 举报
回复
引用 2 楼 dingdanghe 的回复:
我认为是将char赋值给int时 进行了符号扩展,但是不知道为甚么要进行扩展
惯例嘛 char一般被编译看成是有符号类型,有符号类型提升时做符号扩展
WangBr 2012-11-24
  • 打赏
  • 举报
回复
引用 1 楼 yisikaipu 的回复:
改成如下试试再琢磨其中的原因 unsigned char a=0xf7;
我认为是将char赋值给int时 进行了符号扩展,但是不知道为甚么要进行扩展
yisikaipu 2012-11-24
  • 打赏
  • 举报
回复
改成如下试试再琢磨其中的原因 unsigned char a=0xf7;

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧