2009-07-24 3 views
2

나는대로 읽고 VB로 작성된 일부 코드는 다음과 같습니다C#에서 'not uint'를 어떻게 반환합니까?

Return (Not (crc32Result)) 

나는 C 번호로 변환하려고,이 내가 무엇을 가지고 :

return (!(crc32Result)); 

그러나 나는 컴파일러 오류 :

Compiler Error Message: CS0023: Operator '!' cannot be applied to operand of type 'uint'

이 연산자 대신이 연산자를 사용해야합니까?

감사합니다.

답변

15

당신이하려는 것은 crc32result의 비트를 반대로 바꾸는 것입니다. 그렇다면 틸드 연산자 ~가 필요합니다.

return (~crc32Result); 

는 C#으로 참조 this question.

+2

빠른 탐색은 도움이 될 것입니다 ... VB.NET에서는 비트 연산자로 사용할 수 없습니다. 이 경우, 부정 (비트를 뒤집거나 뒤집는)을 수행합니다. 대답은 C# equivilant를 제공합니다. –

+0

감사합니다 저스틴. 유용합니다. –

3

, 뱅 (!)는 부울 변수를 플립하는데 사용된다. 위의 uInt를 부울로 처리하거나 다른 반전을 수행하려고합니까 (아마도 모든 이진수의 반전)?

return crc32Result == 0; 

아니면 내가 뭘하는지에 약간 명확하게하기 위해 :

return (!(bool)crc32Result); // treating as bool (0 = false, anything else is true) 

return (~crc32Result); //bitwise flipping for all 
3

이 시도 :

나는 이들 중 하나 좋을 것 당신이 찾고있는 솔루션입니다 :

return !(crc32Result != 0); 

두 번째 예에서 수행하는 작업은 "0은 거짓이고 0이 아닌 것은 true"라는 원칙에 의해 부울로 변환됩니다. 따라서 0이 아니면 true를 반환합니다. 그런 다음 '!' 운영자가 "하지"작업을 수행 할 수 있습니다. 명시 적으로 제공 한 Visual Basic 코드는 암시 적으로 (C/C++ 에서처럼) 첫 번째 부분을 수행하지만 C# 및 Java는 그렇지 않습니다.

그러나 이것은 함수에서 부울 반환 유형을 찾는 경우에만 해당됩니다. 당신은 비트 단위 반전을하고 있다면, 당신은 다음과 같은 필요 :이 경우

return (~crc32Result); 

의 '~'연산자는 다른 비트 패턴으로 변환을 수행합니다.

관련 문제