signed和unsigned有什么不同??

fan_dtor 2002-11-30 01:20:20
定义
int a=-1;
unsigned int b=-1;
printf("%d %d ",a,b);
printf("%u %u",a,b);
结果:
-1 -1 65535 65535
那signed和unsigned还有什么不同??
a和b在内存中的怎样显示?1111111111111111还是0111111111111111??
请高手指点,最好可以举个例子和用二进制说明一下.
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuoshenme 2002-11-30
  • 打赏
  • 举报
回复
看一看 负数的补码表示 就知道了 (补码+1)
chenbinghui 2002-11-30
  • 打赏
  • 举报
回复
都是1111111111111111,
(你知道补码吗?)
(你知道符号位吗?)

-1如果用16位补码表示就是16个1
这时第一位是符号位,如果是0表示是正数,1表示是负数
那么如果是signed类型,这16个1要分开两部分 1,1111111111111111
~ 符号位!
这样根据补码定义可以得出这16个1表示-1
(~(11111111111111111)-1=0-1=-1)
而如果是unsigned类型,那就没有符号位,
那么这16个1表示的数字是2^16-1=65535
北极猩猩 2002-11-30
  • 打赏
  • 举报
回复
对于short 0xFFFF 是-1
对于 unsigned short 0xFFFF 是65535

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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