2017-02-09 84 views
-1

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

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

但结果始终是0。我是在哪里犯这样的错误?

+0

你提到你的实际结果(0),但你期望的结果是什么? – mfulton26

+0

我预计结果将是0b11111111或255。 –

+2

哦!我明白。我使用错误的操作符。这个问题可能会被关闭。 –

回答

0

它打印0,因为00011111 and 11100000总是返回0and的返回类型为Int,因此如果您想以基数2打印并且前导零,则必须对其进行格式化。

要将其转换为String在基地2个,你可以调用InttoString方法与基数参数:

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

这会给你的号码以二进制格式,但没有前导零。你需要用零填充来获得你想要的格式。我把这个任务交给你(提示:padStart);)

+0

打印只是例子。我想打印Int号码。为什么{0b00011111和0b11100000}总是返回0? 0b00011111是Int编号。 0b11100000是整数。并返回Int。 –

+0

它总是0,因为这就是数学。你什么意思? – marstran

+0

要转换为字符串的更好的方法(imo)是'(0b00011111和0x11100000).toString(2)'。这样你就不必使用Java类 – therealfarfetchd