主题:有道题 需要帮忙 是 十进制和十六进制的
3261253
[专家分:40] 发布于 2005-04-12 20:02:00
假设X为short类型 Y为无符号 short类型 两者当前保存的植为32767 或 十六进制中的 7fff
Y加1得什么? 答案 十进制 32768 十六进制 8000
X加1的解是? 答案 十进制 -32768 十六进制 8000
能帮我解释一下为什么吗?
回复列表 (共7个回复)
沙发
KnowBetter [专家分:150] 发布于 2005-04-13 17:22:00
因为X是short类型带符号以二进制表示最高的一位是符号位,所以加1后 产生了溢出,所以是十进制 是 -32768
0 1111111
+ 0 0000001
_______________
1 0000000 产生了溢出符号位是1表示为负
Y是无符号short类型带符号以二进制表示是01111111,所以
01111111
+00000001
_______________
10000000 即32768没有符号
板凳
3261253 [专家分:40] 发布于 2005-04-13 19:18:00
不带符号的我懂
但带符号的应该是 有负也有正啊? 它为什么只得了-32768 不是说 有符号的short
在-32768~32767 之间吗 为什么不是正 的
还有十六进制为什么得8000
3 楼
christ115 [专家分:1580] 发布于 2005-04-14 08:41:00
有符号short中 00000000表示0
10000000如果按规则为-0,为了避免重复,所以规定10000000为-32768(最小的负数),所以32767+1(01111111+1)溢出后变成10000000,即最小的负数。
4 楼
3261253 [专家分:40] 发布于 2005-04-14 12:01:00
是不是 说 10000000 是规定的 必须为负啊
5 楼
3261253 [专家分:40] 发布于 2005-04-14 12:02:00
是不是 说 10000000 是规定的 必须为负啊
6 楼
3261253 [专家分:40] 发布于 2005-04-14 12:05:00
那为什么在 十六进制中的8000不是负的呢
7 楼
IASM [专家分:260] 发布于 2005-04-14 17:04:00
有无符号数是你自己定义的。
如果你定义的是一个无符号数,就不要去考虑符号位。
反之,就要考虑符号位是否置位,如置位则为负。
如果超出变量范围,对有符号数来说是溢出(最高位进位 XOR 次高位进位)。
对无符号来说是进位(最高位有无进位)。
我来回复