2012-03-11 3 views
0
내가 좋아하는 Boolean 작업을해야 할

,자바 현명한 비트-아니다

B1=00 10 11 01 00 
B2=00 10 11 01 
B1 NOR B2 =11 11 11 11 

어떻게 자바에서 가능하다? 아무도 도와 줄 수 있니?

죄송 합니다만, Java에서 항상 비트없이 현제 NOR 연산을 수행 할 수 있습니까?

+0

는 비트 단위 또는'마십시오. – twain249

+0

B1과 B2는 어떻게 얻습니까? '바이트'? '비트 []'? '정수 []'? 'char []'? –

+2

XNOR을 요청하지 않으시겠습니까? b1 xnor b2는 귀하의 예를 바탕으로 11 11 11 11입니다 ... – Tung

답변

2

왜, 표현은 다음과 같습니다

~(b1 | b2) 

더 많은 정보 Bitwise and Bit Shift Operators를 참조하십시오.

그러나 예제에서 변수의 길이는 다릅니다. 결과는 NOR에 해당하지 않습니다.

업데이트 :

BitSet b1 = new BitSet(); 
// Fill it with booleans: 
for (int i = 0 ; i < myBooleans.length ; i++) 
    b1.set(i, myBooleans[i]); 
// Or fill it with bytes: 
BitSet b1 = BitSet.valueOf(myBytes); 
// Or fill it with 0/1 from a string: 
for (int i = 0 ; i < myString.length() ; i++) 
    b1.set(i, myString.charAt(i) == "1"); 

BitSet b2 = new BitSet(); 
// Same as above 

BitSet result = new BitSet(); 
result.or(b1); // Copies b1 
result.or(b2); // Makes the OR 
result.flip(0,result.size()); // Negates - the result is a NOR 
result.clear(Math.min(b1.size(), b2.size()), result.size()); // Only retain the common size 

경우 : 당신이 논리 값의 두 시퀀스, 아니 같은 크기를 가지고 있고, 단지 (왼쪽에서 오른쪽으로) 그것의 일부를 필요로하는 경우, 나는 BitSet 사용하는 것이 좋습니다 것 당신은 실제로 int을 사용하기를 원한다면 오른쪽에서 왼쪽으로 표현하는 것이 더 낫습니다. 즉, 첫 번째 비트는 b % 2이고 두 번째 비트는 b/2 % 2입니다. 그런 다음 시작 부분에서 설명한대로 NOR를 수행하면됩니다. 필요한 경우 결과.

왼쪽에서 오른쪽으로 표현하면 0으로 채워져 있지 않으면 (예 : B1=0010 1101 0000 0000 0000 0000 0000 0000, B2=0010 1101 0000 0000 0000 0000 0000 0000) 교대가 필요할 것입니다 (또는 곱셈/나눗셈은 본질적으로 똑같은 것이지만 더 비싸지 만 ...). 이 경우 정상적으로 작업을 수행 할 수 있습니다. B2와

+0

죄송 합니다만, 자바에서 왼쪽 비트부터 항상 조금씩 비트를 추가하거나 비트를 추가하지 않고이 비트 현명한 NOR 연산을 수행 할 수 있습니까? – Arpssss

+0

B1과 B2는 어떻게 표현됩니까? (int, boolean [], String ...) 아니면 표현을 아직 선택하지 않았고 제안이 필요할까요? – mgibsonbr

+0

나는 INT를 선택했습니다. – Arpssss

2

그냥 "아니다"또는 "아닙니다"이므로 그냥 비트 또는 반전하십시오.

B1 nor B2 = ~(B1|B2);

귀하의 예는하지만 나에게 이해가되지 않습니다. b1b2이 (INT) 변수 인 경우 (2'b11 NOR 2'b11) = 2'b11?

2

배타적 B1 후 "없습니다"결과 : |`다음 비트 NOT`~`

B1 xnor B2 = ~(B1^B2) 
+0

고마워.하지만 불평등 비트가 잘못된 결과를 준다. 왜냐하면 왼쪽에서 XNOR 연산을하고 있기 때문입니다. – Arpssss