为什么输出的不是负数?

hkk333 2007-11-11 01:42:57
一本C++基础书中的一个习题:设整数42486,如果将这个数定义成无符号整数,以有符号数输出时,结果是什么?

代码:

#include <iostream.h>
#include <stdio.h>
void main()
{
unsigned short i;
i=42486;

cout<<"Hexadecimal:"<<hex<<i<<endl
<<"Octal:"<<oct<<i<<endl;

printf("Oct: %o \t Hex: %X \n",i,i);

printf("%d \n",i); //这行结果和预期不同???

int size=sizeof(unsigned short);
cout<<size<<endl;
}

结果有一行和预期的不同?
printf("%d \n",i);
这行以有符号数输出时是42486,按理应该是个负数啊? i的范围:-32768~32767 <42486应该以负数存放?>
不管怎么试也是正的,不知道到底怎么回事??
...全文
221 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
星光伴月 2007-11-12
  • 打赏
  • 举报
回复
用以下代码测试:

#include <iostream>
using namespace std;
int main(){
unsigned short i=42486;
cout<<i<<endl; //输出42486
cout<<short(i)<<endl;//输出-23050
return 0;
}

blldw 2007-11-11
  • 打赏
  • 举报
回复
#include <iostream.h>

void main()
{
unsigned short i = 42486;

cout << dec << i << endl; // 42486
cout << dec << (signed short)i << endl; // -23050

}
SpizL 2007-11-11
  • 打赏
  • 举报
回复
我觉得那本外国的大块头不错啊!!!我就是那本书开始学的!!!
hkk333 2007-11-11
  • 打赏
  • 举报
回复
看起来是那本书错了,是钱能的那本红皮书,汗

上面2.7节还有类似这样一个讲解:

unsigned int a=65533;
printf("a=%d",a);

结果为:a=-3

刚才试了一下,根本是错的就算把a改成unsigned short也是错的

这书除了是中文外和不是大部头外就不怎么样了
SpizL 2007-11-11
  • 打赏
  • 举报
回复
unsigned 无符号类型,最高位0或1对正负没影响!!!楼主看书时应该仔细点!!
yydrewdrew 2007-11-11
  • 打赏
  • 举报
回复
2^16 = 65536
unsigned 没符号位吧。
xiaobukuai 2007-11-11
  • 打赏
  • 举报
回复
3楼正确,我在1楼写错了,是0到2^16-1,42486在这个区间。
benbon 2007-11-11
  • 打赏
  • 举报
回复
而且就算要转换也应该是转成int(整型),显然不会是负数
benbon 2007-11-11
  • 打赏
  • 举报
回复
printf("%d",...并不会将unsinged short 转成short,所以结果是正确的
nileileini 2007-11-11
  • 打赏
  • 举报
回复
你定义的是unsigned short 类型的,它的范围你记错了,应该是0~65535,现在明白了吗?
xugang_2001 2007-11-11
  • 打赏
  • 举报
回复
unsigned short 应该是无符号的16位整数,所以范围应该是0到2^16 - 1 = 65534 > 42486

所以pintf出来的是42486完全是正确的,怎么会是负数呢?
hkk333 2007-11-11
  • 打赏
  • 举报
回复
但是我在下面输出了unsigned short的字节数做对照,是2字节啊,应该是0-2^16-1吧.
xiaobukuai 2007-11-11
  • 打赏
  • 举报
回复
i是unsigned short型,取值区间应该是0~~2^31-1吧,42486在这个区间啊。

64,654

社区成员

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

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