는 전 C#로 마이그레이션하려고 자바 프로그래머 해요,이 날 약간 난처한 상황에 빠진 잡았다 :비트 단위 또는 long으로의 암시 적 캐스트가있는 것 같습니다. 피할 수 있습니까?
int a = 1;
a = 0x08000000 | a;
a = 0x80000000 | a;
첫 번째 줄은 잘 컴파일합니다. 두 번째는 그렇지 않습니다. 부호 비트와 일정이 있음을 인식하는 것, 그리고 어떤 이유로이 오류의 결과로, 긴에 결과를 캐스팅하기로 결정 :
Cannot implicitly convert type 'long' to 'int'.
An explicit conversion exists (are you missing a cast?)
지금까지이 수정은 다음과 같습니다
Bitwise-or operator used on a sign-extended operand;
consider casting to a smaller unsigned type first
은 무엇 오류/경고/길이없는 방식으로이를 표현하는 올바른 C#을 방법이 될 것입니다 : 여전히 캐스트 다루고 있지만
a = (int)(0x80000000 | a);
는 경고를 남긴다?
아니요,'uint'입니다 : http://msdn.microsoft.com/en-us/library/aa664674%28VS.71%29.aspx – Joey
사실, 그것은 가장 깨끗한 수정처럼 보입니다. 감사. – izb
많은 마스크가 있기 때문에 코드 정리가 필요합니다. private const int MASK_80000000 = 선택 안 함 ((int) 0x80000000); – izb