2016-08-18 10 views
0

나는 2 & 3 번째 줄에서이 C# 코드에서 오류가 발생하고비트 연산

byte Data = 0x00; 
Data = Data | 0x80; 
Data = Data >> 1; 

컴파일러는 말한다 : 암시 바이트 '에 유형'INT '을 변환 할 수 없습니다 '. 명시 적 변환이 존재합니다 (캐스트를 놓치셨습니까?)

그러나 "데이터"를 부호없는 char로 사용하는 C에서이 코드를 성공적으로 실행합니다.

C#에서이 작업을 수행하려면?

도움 주셔서 감사합니다.

+1

'Data >> 1'은'int' 타입입니다. 단지'byte'로 변환하십시오 :'Data = (byte) (데이터 >> 1); ' –

답변

1

캐스트 명시 적으로 좋아 :

byte Data = 0x00; 
Data = (byte)(Data | 0x80); 
Data = (byte)(Data >> 1); 

또는 것은 (int)로 날짜를 선언하고

int Data = 0x00; 
Data = Data | 0x80; 
Data = Data >> 1; 
byte bData = (byte)Data; 
2

가 변환을 방지하기 위해 (당신이 확신하는 경우가 바이트에 맞는) 끝에 바이트로 변환 대신에 할당 연산자를 사용할 수 있습니다.

byte Data = 0x00; 
Data |= 0x80; 
Data >>= 1; // result is 0x40 
+0

결과가 64 인 이유를 모르겠습니까? 나는 "데이터 또는 0x80"데이터가 0x80이되고 "데이터가 오른쪽 1 시간으로 이동합니다"라고 생각합니다. 데이터는 0x40이됩니다. 결과 데이터는 0x40이어야합니다. 내가 맞습니까? –

+1

Meh, 일반적인 숫자 형식입니다. 네가 옳아. 16 진수 값을 얻으려면'ToString ("x")'가 필요했습니다. – Will

+1

아, 아주 분명하지는 않지만 멋진 곳! 내 표를 얻었다 : D – leppie