2010-11-24 4 views
3

아마 이것은 매우 쉽습니다.두 개의 부울을 int로 변환하십시오

두 개의 부울 a와 b가있는 경우 어떻게 동등한 "2 진"수를 얻을 수 있습니까?

false and false = 0 
false and true = 1 
true and false = 2 
true and true = 3 
+0

을, 당신은'00, 01, 10, 11'을 표시하고 싶은거야? 또는 '0, 1, 2, 3'? –

+0

이 질문은 '자바'와 '언어 불가지론 자'가 될 수 있습니까? –

+0

나는 새로운 버전의 FizzBuzz를 만들었습니다. 나는 'i % 3 =와 i % 5 == 0'에 기초한 색인을 얻을 필요가있었습니다. http://rosettacode.org/wiki/FizzBuzz#Using_an_array – OscarRyz

답변

10
(left ? 2 : 0) + (right ? 1 : 0); 

확실하지 자바는 C와 같은 논리 값을 처리하지만, 경우는 않는 경우 :

2*left+right; 
+0

굉장해! 감사! – OscarRyz

+4

그렇지 않습니다. 그래서 .. 첫 번째가 정확합니다. – OscarRyz

+0

삼자 운영자에 대해 가르쳐 주셔서 감사합니다 –

1

또는 논리 값의 배열에 대한보다 일반적인 솔루션 :

public static BigInteger asBinary(boolean[] values){ 
    BigInteger sum = BigInteger.ZERO; 
    for(int i = 0; i < values.length; i++){ 
     if(values[i]){ 
      sum = sum.add(
       BigInteger.valueOf(2).pow(values.length - (i+1))); 
     } 
    } 
    return sum; 
} 

을 (그것을보십시오 일 on ideone)

효율성을 위해서 배열 크기가 < 32 인 경우 내부 처리에 int를 사용하는 것이 가장 좋겠지 만 이것은 단지 데모이므로 건너 뛸 것입니다.

0

이것은 코드보다 많은 숫자 이론입니다. 그것은 당신의 문제에 대한 정확한 해결책이 아니지만, 당신에게 무슨 일이 일어나고 있는지에 대한 더 깊은 통찰력을 줄 수 있습니다.

표준 십진수 (베이스 (10))의 수치 합계 일련 사용하여 표현 될 수있다 :

1023 당량이다 + 0 * 100 + 2 * 10 + 3 * 1

* 1000 1 이것은 (1 * 10^3) + (0 * 10^1) + (2 * 10^1) + (3 * 10^0)

과 동일합니다. 2 진수 101과 같은 수는 다음과 같이 표현 될 수있다 :

1 * 2^2 = 0 * 2^1 + 1 * 2^0 = 4 + 0 + 1 = 십진수 5

3

이 언어를 불가지론 자로 표시 했으므로 Scala에서이를 수행하는 방법을 게시 할 것입니다. :-)

scala> implicit def boolToAddable(a: Boolean) = new { 
    | def +(b: Boolean): Int = (a, b) match { 
    |  case (false, false) => 0 
    |  case (false, true) => 1 
    |  case (true, false) => 2 
    |  case (true, true) => 3 
    | } 
    | } 
boolToAddable: (a: Boolean)java.lang.Object{def +(b: Boolean): Int} 

scala> false + false 
res0: Int = 0 

scala> false + true 
res1: Int = 1 

scala> true + false 
res2: Int = 2 

scala> true + true 
res3: Int = 3 

은 또한 당신이 위에 @ 데이비드에 의해 제안 트릭 사용할 수 있습니다 그래서

scala> implicit def boolToAddable(a: Boolean) = new { 
    | def +(b: Boolean) = (if(a) 2 else 0) + (if(b) 1 else 0) 
    | } 
boolToAddable: (a: Boolean)java.lang.Object{def +(b: Boolean): Int} 
+0

+1 오늘 읽어야 할 가장 모호한 언어를 사용했습니다. –

+0

실제로는'false + false = 0','false + true = 1','true + false = 2' 및'true + true = 3'이됩니다. – OscarRyz

+0

@Oscar : 편집을 확인하십시오. – missingfaktor

관련 문제