【问题标题】:How does this work? x<<=3 = -8 where (byte)x = 127?这是如何运作的? x<<=3 = -8 其中(字节)x = 127?
【发布时间】:2012-05-09 08:56:00
【问题描述】:

为什么我会得到这个输出?

字节 x ; x = 127; x

输出:-8

当我在纸上记下它并旋转我得到的位时 - 11111000 = 248

我假设Byte占用1个字节(8位)。不知道它是有符号还是无符号?我假设它是有符号的?

因为下面给出的 C 代码也给了我 -8:

有符号字符 x = 127; x

为什么是-8?? rgd 软软的

【问题讨论】:

  • C 代码没有明确定义 - 移位生成值 1016,如果超出 signed char 的范围,则结果是实现定义的。

标签: java c logic unsigned


【解决方案1】:

这是因为byte 是使用two's complement 的有符号数据类型。而248-256 等于-8

【讨论】:

  • +1 我会写 byte 而不是 Byte(byte) 248 == -8
【解决方案2】:

因为您使用的是有符号字符,其范围是 -128 到 127.. 带符号字符的最高有效位 (MSB) 仅限于其带符号的.. 0 表示正数,1 表示负数。

如果是肯定的.. 该值正常计数。

但如果是否定的.. 该值为计数 [normal_value] - [max_value] 例如:

129 = 1000 0001 [位]

所以有符号的值 = 129 - 256 = -127

CMIIW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2015-12-06
    • 2021-03-09
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多