帮忙解释一下这个程序段

charlie790801 2004-11-21 03:46:56
#include "iostream.h"
void main()
{
unsigned int i = 3;
cout<<i*-1<<endl;
}


我算得和执行的结果怎么不一样, 晕
...全文
138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dokee 2004-11-21
  • 打赏
  • 举报
回复
补码的知识~
无符号的65535相当于有符号的-1
所以-3相当于无符号的65533
oyljerry 2004-11-21
  • 打赏
  • 举报
回复
数据类型转换
charlie790801 2004-11-21
  • 打赏
  • 举报
回复
正如huailt兄所解释的一样,tc下编译是-3,这个清楚了!
至于vc下编译,不会出错,是wentiboy(与人)兄所说的VC是32位的,所以结果是2^32-3,但是我不知道为什么会是这个答案!麻烦解释下
huailt 2004-11-21
  • 打赏
  • 举报
回复
VC下unsigned优先于int,所以必须转为无符号..可是结果却是有符号的.产生冲突所以出现错误.
TC下int优先unsigned,就是有符号的-3了
charlie790801 2004-11-21
  • 打赏
  • 举报
回复
我起先理解成(2^32-1) 然后再*3了!
charlie790801 2004-11-21
  • 打赏
  • 举报
回复
wentiboy兄,可否解释一下,为什么是减去3啊?
beepbug 2004-11-21
  • 打赏
  • 举报
回复
答案是-3符合C经典。
在“cout<<i*-1<<endl;”里,C先做表达式“i*-1”。按C规则当一无符号数与一有符号数用一运算符关联时,先将无符号数转为符号数。
各种C编译器有差异,是很常见的事。
rice_v 2004-11-21
  • 打赏
  • 举报
回复
不同类型的操作数运算时,运算结果的类型为最高级别类型。你所说的运算中unsigned的级别高于int
wentiboy 2004-11-21
  • 打赏
  • 举报
回复
tc是16位的,所以结果是2^16-3
VC是32位的,所以结果是2^32-3
cliangb 2004-11-21
  • 打赏
  • 举报
回复
那只能说两个编译器的问题,我上面说的是VC下的,VC下肯定不是-3,因为类型的问题,
charlie790801 2004-11-21
  • 打赏
  • 举报
回复
不是这个答案 . 在tc下面是-3, 在vc下面不是-3, 你可以test一下!
cliangb 2004-11-21
  • 打赏
  • 举报
回复
因为i是无符号整型,显示不了负数了,
unsigned int i = 3;
int j= i*-1;
cout<<j<<endl;
这样就是-3罗

64,654

社区成员

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

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