【问题标题】:Bitwise "and" operation into the kotlinkotlin 中的按位“与”操作
【发布时间】:2017-02-09 11:57:10
【问题描述】:

如果负数是从 -31 到 -1,那么我想将它表示为 111XXXXX 格式。 我尝试使用“和”按位运算符:

println("0b00011111 & 0xe0 is ${0b00011111 and 0xe0}")
println("31 & 0xe0 is ${31 and 0xe0}")
println("0b00011111 & 0b11100000 is ${0b00011111 and 0b11100000}")

但结果总是0。我哪里出错了?

【问题讨论】:

  • 您提到了您的实际结果 (0),但您的预期结果是什么?
  • 我希望结果是 0b11111111 或 255。
  • 哦!我明白。我使用了错误的运算符。这个问题可以结束了。

标签: kotlin bitwise-operators


【解决方案1】:

它打印 0 因为00011111 and 11100000 总是返回0and 的返回类型是Int,所以如果你想用前导零以base 2 打印它,你必须格式化它。

要将其转换为以 2 为底的 String,您可以使用 radix 参数在 Int 上调用 toString 方法:

val numberString = (0b00011111 and 0b11100000).toString(2);

这将为您提供二进制格式的数字,但没有前导零。您需要用零填充以获得所需的格式。我把这个任务留给你(提示:padStart);)

【讨论】:

  • 打印只是示例。我想打印整数。为什么 {0b00011111 和 0b11100000} 总是返回 0? 0b00011111 是 Int number 。 0b11100000 是整数。并返回 Int。
  • 它始终为 0,因为它在数学上就是这样。什么意思?
  • 转换为字符串的更好方法 (imo) 是 (0b00011111 and 0x11100000).toString(2)。这样您就不必使用 Java 类
  • @therealfarfetchd 哦,不错 :) Kotlin 1.1 中引入了该功能。这个答案是在那之前写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多