2017-03-06 5 views
0

x = 1 일 때 무엇을해야합니까 ! x | x 해야합니까? 나는 그것을 한 것처럼 정말로 혼란 스럽다. x = 1 = 01 (이진수), !x = 10 = 11 = 10 진수.비트 단위 C 연산

그러나 그것은해야 1. (심지어 긴 진수 (뭔가를하려고 시도하지만 대학원에로 배우고 무엇을), 내가 가진 -1)

답변

4

!논리적 부정 연산자입니다. 0이 아닌 값을 주면 0을 돌려줍니다. 당신이 그것을 0을주는 경우에 당신이이 비트 부정 연산자, ~ 다른 방법 위로 1.

그래서

!x | x 
=> !1 | 1 
=> 0 | 1 
=> 1 

참고를 제공합니다. 이 대신 !의 사용했다면 상황이이처럼 일한 것 (8 비트 값을 가정하면, 32 또는 64 또는 무엇이든까지 확장 가능) :

~x | x 
=> ~1 | 1 
=> 11111110 | 00000001 
=> 11111111 
=> -1 

를 그것은 모든 차이를 이해하는 온다 !~ 사이 그것은 분명하지 않다. 그것은 당신이 익숙해 져야하는 것입니다. 그냥 제로가 아닌 x, !x = 0에 대한 알림

!7 = !23423523 = !46 = !(-200) = !1 = 0 

있다. 그것이 바로 그 방법입니다. 그 뒤에있는 생각은 C가 0을 거짓으로 취하고 다른 것은 참이라고 가정합니다. 따라서, 진정한로서 70,343 또는 1 카운트와 같은 값이 그것에 !인가 이후 false를 제공하거나 0

1

! 연산자 !x 숫자 포인터 유형 모두 x == 0 동등, 논리 부정위한 것이다.

!xint 입력 가지며 1 경우 x의 값 0 동등한 비교하여 다른 경우에 0의 값을 갖는다.