【问题标题】:How to change the most significant bit to a 1 after shifting an int to the right using '>>'?使用'>>'将int向右移动后如何将最高有效位更改为1?
【发布时间】:2020-09-20 06:56:22
【问题描述】:

例如,当我有一个像 0x54 这样的二进制数字时,它会是 01010100。使用按位运算符“>>”后,这个数字将变成 00101010。最高有效位不是 0,而是需要它是一个。我怎样才能做到这一点?

【问题讨论】:

  • 你还知道哪些二元运算符?
  • 请注意,>> 采用 两个 操作数。在您的示例中,您显然写了0x54 >> 1。你会一直写>> 1,还是有时会移动不止一个?如果是后者,那么——在这种情况下你需要什么行为?
  • 另外,在您的示例中,您显示了八位。假设您使用的是 byte 类型是否公平,这样最高有效位将始终是 0x80 处的位?
  • (x >> 1) | (1 << 31) 表示整数。
  • @BeauVansiclen:回复:“由 32 位组成的长整数”:但是您已将此问题标记为 [java],而在 Java 中,long 始终为 64 位。 (它的 32 位对应物是 int。)

标签: java binary bit-manipulation bitwise-operators


【解决方案1】:

你的号码总是 8 位宽吗?如果是这种情况,您可以简单地使用 10000000 的十进制表示,即 128 并按位或 所以让我们以你的例子为例

int val = 84; /// 01010100
int newVal = val >> 1; // 00101010
int mostSig = newVal | 128; // 10101010

【讨论】:

  • 问题状态转移一个 int 但如果它是一个长值那么它或多或少是相同的方法。 long maxLongVal = 1L << 31; // 100000000000.... long val = 84; long newVal = val >> 1; long mostSig = newVal | maxLongVal; // 100000.....0101010
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多