请问16进制数有符号吗?

sleps 2008-09-09 11:52:14
-47对应的16进制数为1000002f还是f000002f??迷糊了 请大家帮忙
...全文
2320 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd5816690 2008-09-10
  • 打赏
  • 举报
回复
对应 ffffffd1

测试如下:
System.out.println(Integer.toHexString(-47));
hikaru71 2008-09-10
  • 打赏
  • 举报
回复
2f
计算机里面存储的负数都是补码
原来的数取反加1
  • 打赏
  • 举报
回复
如果是 32 位有符号 int 数的话,转成 16 进制,最高位的那一个数肯定是大于 7 的。

先把 -47 转成二进制,转换方式:

1,-47 把负号去掉,用 47 转成二进制为 101111
2,将 101111 所有位(含最高的符号位)取反再加 1:

0000 0000 0000 0000 0000 0000 0010 1111
~ 1111 1111 1111 1111 1111 1111 1101 0000
+ 0000 0000 0000 0000 0000 0000 0000 0001
————————————————————————
1111 1111 1111 1111 1111 1111 1101 0001

即:0xFFFFFFD1
beiouwolf 2008-09-10
  • 打赏
  • 举报
回复
16进制看起来不方便
打印成2进制看起来比较清楚,看第一位
dracularking 2008-09-10
  • 打赏
  • 举报
回复
补正 可以说java中基本无 无符号数(there's no unsigned),
但16进制表示法某种程度上可以看成是unsigned type
dracularking 2008-09-10
  • 打赏
  • 举报
回复
首位0 1是二进制的判断标识
java中无有符号数 所以都是将数据对半分一半为正一半为负
对于64bit 16进制数
0x00000000~0x7fffffff是正数
0x80000000~0xffffffff就是负数
网络咖啡 2008-09-10
  • 打赏
  • 举报
回复 1
-2f啊
ZangXT 2008-09-10
  • 打赏
  • 举报
回复
最高位,也就是31位为0表示正,为1表示负
sleps 2008-09-10
  • 打赏
  • 举报
回复
取反再加1 实际上是负数的补码形式 对吧?

62,631

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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