回 帖 发 新 帖 刷新版面

主题:有道题 需要帮忙  是 十进制和十六进制的

假设X为short类型  Y为无符号 short类型  两者当前保存的植为32767 或 十六进制中的 7fff

Y加1得什么?    答案 十进制 32768  十六进制 8000
X加1的解是?   答案 十进制 -32768  十六进制 8000
能帮我解释一下为什么吗?

回复列表 (共7个回复)

沙发

因为X是short类型带符号以二进制表示最高的一位是符号位,所以加1后 产生了溢出,所以是十进制 是 -32768
  0 1111111
+ 0 0000001
_______________
  1 0000000          产生了溢出符号位是1表示为负

Y是无符号short类型带符号以二进制表示是01111111,所以
01111111
+00000001
_______________
10000000       即32768没有符号

板凳

不带符号的我懂
但带符号的应该是 有负也有正啊?   它为什么只得了-32768    不是说 有符号的short
在-32768~32767 之间吗    为什么不是正 的

还有十六进制为什么得8000

3 楼

有符号short中 00000000表示0
10000000如果按规则为-0,为了避免重复,所以规定10000000为-32768(最小的负数),所以32767+1(01111111+1)溢出后变成10000000,即最小的负数。

4 楼

是不是 说      10000000 是规定的 必须为负啊

5 楼

是不是 说      10000000 是规定的 必须为负啊

6 楼

那为什么在 十六进制中的8000不是负的呢

7 楼


有无符号数是你自己定义的。

如果你定义的是一个无符号数,就不要去考虑符号位。
反之,就要考虑符号位是否置位,如置位则为负。

如果超出变量范围,对有符号数来说是溢出(最高位进位 XOR 次高位进位)。
对无符号来说是进位(最高位有无进位)。

我来回复

您尚未登录,请登录后再回复。点此登录或注册