정수를 패킹하려고 시도하는 C# 응용 프로그램에서 메서드가 있지만 교대 연산자가 이상하게 작동합니다.
아래 코드의 주석은 줄을 실행 한 후 디버거가 보는 코드 내용을 보여줍니다. 다음 코드에서 비트 연산자의 이상한 동작은 어떻게됩니까?
long code = 0; //0x0000000000000000
code += (0x1111 << 32); //0x0000000000001111
code += (0x2222 << 16); //0x0000000022221111
code += (0x3333); //0x0000000022224444
내가 0x1111 초래 먼저 실행된다 괄호에 포함 된 코드는 32 비트 왼쪽으로 시프트 될 것으로 기대, 첫 번째 라인을 가지고, 아직은 아니지만, 다음 줄에 시프트가 일어나고 정확한 위치에서도 수행됩니다 (예 : 0x2222는 추가하기 전에 이동해야합니다. 그렇지 않으면 결과는 0x33330000이됩니다).
나는 이것을 설명하는 연산자에 대해 무엇을 놓쳤는가? 당신이 놓친 무엇
변수'code'는 긴 값입니다. 왜 0x1111은 길다라고 생각합니까? –
'0x1111' *은 왼쪽으로 32 시프트되었습니다. 0으로 왼쪽으로 시프트하는 것과 같습니다. – harold