unsigned int x=65535,按%d的形式输出得到-1,这个是怎么转化的?谢谢!

infooffice 2003-11-22 12:17:18
谢谢!
...全文
1683 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-11-23
  • 打赏
  • 举报
回复 1
65565就是ffff,不是-1是什么?
任何一种字长的整数类型中,全1的、带符号的肯定-1。
至于为什么,可以查一查补码的定义啊。
yizhili 2003-11-22
  • 打赏
  • 举报
回复 1
这是机器内码的关系。计算机一般用原码表示正数,补码表示负数。所谓补码就是反码+1。
(为方便以下用16进制表示而不用2进制)
比如signed short型的-1,16进制下1的反码为fffe,补码就是ffff,也就是说计算机里-1是用ffff表示的
而在usigned short型中,ffff仍是原码,表示的是65535,于是就出现了你所说的情况。
infooffice 2003-11-22
  • 打赏
  • 举报
回复 1
我知道是应为益出了,我就是想知道内部是怎么处理成-1的
晨星 2003-11-22
  • 打赏
  • 举报
回复 1
你用的16位的编译器吧?
"%d"控制被输出变量按带符号整数输出,改为"%u"应该就可以了。
proware 2003-11-22
  • 打赏
  • 举报
回复 1
溢出了,定义为unsigned long
即可
gaowenjun233 2003-11-22
  • 打赏
  • 举报
回复 1
溢出了,定义为unsigned int
改一下就行,

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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