首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin将数分解为2的幂

Kotlin将数分解为2的幂
EN

Stack Overflow用户
提问于 2019-08-15 17:57:16
回答 4查看 209关注 0票数 0

嗨,我正在用kotlin编写一个应用程序,需要将一个数字分解为2的幂。

我已经在c#、PHP中这样做了,但是kotlin的工作方式有所不同。

在研究了这一点之后,我相信这与代码中的数字在某个地方变成负数有关,解决方案在于将一个或多个变量声明为“长”,以防止这种情况发生,但我一直无法找到如何做到这一点。

这是我的代码:

代码语言:javascript
复制
    var salads = StringBuilder()
    var value = 127
    var j=0
    while (j < 256) {

        var mask = 1 shl j
        if(value != 0 && mask != 0)  {

            salads.append(mask)
            salads.append(",")

        }
        j += 1
    }

    // salads = (salads.dropLast()) // removes the final ","
    println("Salads = $salads")

这个输出应该是: 1,2,4,8,16,32,64我实际得到的是:

代码语言:javascript
复制
1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,-2147483648,

有什么想法吗?

EN

Stack Overflow用户

发布于 2019-08-16 01:34:11

您可以获得适合于Int的所有两个幂的列表,并测试每个幂函数是否包含infix函数and

代码语言:javascript
复制
val value = 126

val powersOfTwo = (0 until Int.SIZE_BITS).map { n -> 1 shl n }
println(powersOfTwo.filter { p -> value and p != 0}.joinToString(","))
// prints: 2,4,8,16,32,64

查看Kotlin操场上的全部代码:https://pl.kotl.in/f4CZtmCyI

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57514070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档