2017-12-15 23 views
1

작동하지 shl` : 제대로코 틀린`내가 코 틀린에 <code>Int</code> 값으로 <code>shl</code>을 적용하려고 해요

1092455 
0000000000010000 1010101101100111 
0000000000000000 0000000000000000 
0000000000000000 0000000000010000 

당신이 볼 수 있듯이, shr :

val a = 1092455 
println(a.toString()) 
println(toString(bits(one))) 
println(toString(bits(one shl 16))) 
println(toString(bits(one shr 16))) 

이 다음과 같은 출력을 생성 가장 왼쪽의 16 비트 (0000000000010000)가 오른쪽으로 시프트되지만, shl은 예상 출력 (1010101101100111 0000000000000000)을 제공하지 않습니다.

무엇이 누락 되었습니까?

편집 : bits 방법 :

fun bits(value: Int): BooleanArray { 
    var x = value.toDouble() 
    val result = BooleanArray (32) 

    for (i in 31 downTo 0) { 
     val d = Math.pow(2.0, i.toDouble()) 
     if (x >= d) { 
      x -= d 
      result[i] = true 
     } 
    } 

    return result 
} 
+0

당신이'bits' 구현을 제공하시기 바랍니다 수 :

코드 사용 Long 값을 수정하려면? – voddan

+0

@voddan 아,'bits' 구현은 서명을 고려하지 않았습니다. Ffs – AesSedai101

+1

'toString (2)'를 사용하여 내 대답에 숫자를 인쇄하는 방법을보십시오 – voddan

답변

2

숫자 값이이 값을 왼쪽으로 이동하는 경우에, 코 틀린에 로그인은 음수로 오버 플로우. 그런 다음 사용중인 bits의 구현은 비트를 올바르게 인쇄 할 수 없습니다. 여기

은 나를 위해 작동 방법은 다음과 같습니다

val a = 1092455 
println((a shr 16).toString(2)) 
println((a shl 15).toString(2)) 
println((a shl 16).toString(2)) 

인쇄 :

10000 
1010101101100111000000000000000 
-1010100100110010000000000000000 

나에게 합리적인 것 같다.

val a: Long = 1092455