2016-10-05 15 views
-4

단항 연산자 '&'은 어떻게 작동합니까?단항 연산자 '&'는 어떻게 작동합니까?

int num = 50, num2 = 100; 

int x = num & num2; 

결과 : X = 32

int num = 100, num2 = 90; 

int x = num & num2; 

결과 :이 코드를 실행 한 테스트 프로젝트에서

는 X =

64 어떻게 계산합니까? MSDN에서

+3

그것은 단항 연산자 아니다. 그것이하는 일에 관해서는, _bitwise operations_에서 읽으십시오. – paddy

+1

간단한 구글 검색을하면 해답을 얻을 수 있고 단항 연산자가 아닌 비트가 AND가됩니다. –

+0

'&'연산자는 두 개의 피연산자를 사용합니다. 왜 당신은 그것을 단 하나라고 부릅니까? –

답변

2

: &

이진 연산자는 정수형 및 부울에 대해 미리 정의되어 있습니다. 정수 유형의 경우 &은 피연산자의 논리적 비트 단위 AND를 계산합니다. bool 피연산자의 경우 &은 피연산자의 논리 AND를 계산합니다. 그 경우 은 피연산자가 모두 참인 경우에만 결과가 참입니다.

귀하의 경우에는 통합 유형 버전입니다.

그래서 :

50 in binary is 00110010  
100 in binary is 01100100  
AND result is 00100000 (32 dec) 
0

짧은 대답은 - 그것은 의존한다.

정수의 경우, 비트 연산을 수행합니다. 따라서 01100100 (100) 비트 단위 AND00110010 (50) = 00100000 (32)입니다.

첫 번째가 false 인 경우 두 번째 표현식을 평가하지 않는 지연된 AND &&과 달리 열의 AND (항상 두 표현식을 평가 함)의 경우.

1

비트 단위 연산자는 비트 단위로 작업하고 비트 단위로 연산합니다.

이진 AND 연산자는 두 피연산자에 모두있는 경우 결과에 비트를 복사합니다.

(A & B) = 12, i.e., 0000 1100 
1

우선 : 그것은 인수가 같은이 상황에서 & 연산자입니다. 아니요단 하나 연산자입니다.

& 두 개의 인수가있는 비트 AND 연산자입니다.

50 & 1000b110010 & 0b1100100입니다. 각 비트에 &을 적용하면 0b100000이 32입니다.

마찬가지로 100 & 90을 분석 할 수 있습니다.

1

이진 값

50 (10) = 0110010 (2) 
100 (10) = 1100100 (2) 

논리적 AND 모두 값 1이 이제 한 결과이다되도록 비트 만 사용된다

0100000 (2) = 32 (10) 

100 (10) = 1100100 (2) 
AND 
90 (10) = 1011010 (2) 
------------------------ 
64 (10) = 1000000(2) 
0

이것 비트 AND입니다.

"0b0110010 AND 0b1100100"에서 일반적인 장소에서 1과 0을 공유하여 0b0100000 = 32를 찾아야합니다.

"100 AND 90"은 0b1000000 = 64가됩니다.

도움이 되었기를 바랍니다.

0

비트 연산자는 입니다. 50 비트 (이진)은 (오른쪽으로 세척)으로 정렬 할 때, 110,010, 100, 당신은 & 오퍼레이터가 각 위치에서 사용자가 하나를 얻을 수있는 방식으로 작동 110010 1100100

얻을 1,100,100이다 두 줄에 1이 있으면 다음과 같이 0을 얻습니다. 무슨 일이 일어나고 있는지 110010 1100100 ||||||| 0100000 그래서 당신은 (비트 작업을 수행 할 때 명확하게 비트를보기 위해) (32)

1

바이너리로 두 숫자를 표현입니다 이진 결과 100000을 얻고 살펴 있습니다

private static String AndExplanation(int left, int right) { 
    String x = Convert.ToString(left, 2); 
    String y = Convert.ToString(right, 2); 
    String z = Convert.ToString(left & right, 2); 

    int length = Math.Max(x.Length, y.Length); 

    return String.Join(Environment.NewLine, 
    $"{x.PadLeft(length, '0')} ({left}) &", 
    $"{y.PadLeft(length, '0')} ({right})", 
    new String('-', length), 
    $"{z.PadLeft(length, '0')} ({left & right})" 
); 
} 

Console.Write(AndExplanation(50, 100)); 

Console.Write(AndExplanation(90, 100)); 

당신이 볼 시험 :

,451,515,
0110010 (50) & 
1100100 (100) 
------- 
0100000 (32) 

1011010 (90) & 
1100100 (100) 
------- 
1000000 (64) 
관련 문제