문제

나는 다음과 같은 C#코드:

byte rule = 0;
...
rule = rule | 0x80;

을 생산하는 오류:

할 수 없는 암시적으로 변환한 유형'int'를'바이트'.는 명시적 변환 존재하는(당신은 누락 캐스팅?)

[업데이트:첫번째 버전의 질문은 최우선 사항입니다.나는 잘못을 컴파일러 출력]

추가 캐스팅 문제를 수정:

rule = rule | (byte) 0x80;

필요하기:

rule |= 0x80;

그냥 이상한 것 같다.왜 |= 운영자는 모든 다른 | operator?

은 거기에 다른 어떤 방법을 말하는 컴파일러를 치료하는 일정한 바이트?


@Giovanni Galbo :예 아니다.코드를 다루는 프로그래밍의 플래시 메모리에서 외부 장치와 논리적으로 나타내는 단 하나의 바이트 메모리이다.들 수 있을 정도 그것은 나중에 하지만,이는 듯이 더 명백하다.내 C 유산을 통해 보여주는 너무 많이!

@조나단 네덜란드 :는'로'구문을 보이 깔끔하지만 불행하게도 나타나지 않는다.생산:

As 운영자와 함께 사용해야 합 참조 형식 또는 null 을 허용 입력('바이트'은 null 이 아닌 값을 입력)

도움이 되었습니까?

해결책

int rule = 0;
rule |= 0x80;

http://msdn.microsoft.com/en-us/library/kxszd0kx.aspx 의|운영자에 대해 정의된 모든 값 형식입니다.나을 것이라 생각 생산하기위한 결과입니다.The"|="연산자 또는 할당 운영자,단순히 줄임에 대한 규칙=규칙|0x80.

중 하나 niftier 것에 대 C#는 당신이 그것을 할 수 있습 것 같은 남용 가치 유형 단순히 기반에 자신의 크기입니다.Int'은 정확히 동일한 바이트를 제외하고,컴파일러는 것입니다 던지는 경고를 만약 당신이 시도하고 당신이 그들을 사용에 모두 동일한 시간입니다.단순히 집착으로 한다(이 경우,int)잘 작동합니다.당신이 우려에 대해 64bit 준비를 지정할 수 있습니다 int32 지만,모든 수 있 int32s,심지어에서 실행 64 모니다.

다른 팁

C#없 리터럴 접미사에 대한 바이트입니다.u=uint,l=long,ul=ulong,f=float m=decimal 지만,없는 바이트입니다.캐스팅해야 합니다.

이동:

rule = (byte)(rule | 0x80);

분명히 식'규칙|0x80'int 를 반환합니다 심지어는 정의한 경우에는 0x80 로'const byte0x80'.

하신 용어는"문자"그리고 불행하게도 C#이 없는 바이트다.

여기에 목록 모든 C#리터럴.

에 따라 ECMA 사양,pg72 이 없는 바이트다.만 정수에 대한 자세한 내용은 리터럴 유형:int uint,long 및 ulong.

처럼 당신이 사용할 수 있습니다 그것은 추한 방법: http://msdn.microsoft.com/en-us/library/5bdb6693.aspx.

거의 년에 그리고 아무도는 실제로 질문에 대답.

의 몇 가지 답을 주장하는 문제입니다 부족의 바이트는 문자,그러나 이것은 무관하다.당신이 계산 (byte1 | byte2) 결과는 형식 int.는 경우에도"b"었 리터럴 접미사에 대한 바이트의 유형 (23b | 32b) 아직도 int.

허용되는 답변의 링크 MSDN 문서 주장하는 것 operator| 에 대해 정의된 모든 중요한 유형,그러나 이것은 진실하지 않다.

operator| 에 정의되어 있지 않은 byte 도록 컴파일러에 사용하는 그것의 일반적인 과부하를 해결 규칙을 선택한 버전의 정의에 int.따라서,원하는 경우 할당하는 결과 byte 당신이 필요 캐스팅:

rule = (byte)(rule | 0x80);

문제는 남아있는 이유는 무엇 rule |= 0x80; 작동합니까?

기 때문에 C#사양에는 특별 규정에 대한 화합물이 배정할 수 있는 생략 명시적으로 변환합니다.화합물에서 할당 x op= y 이 규칙은 다음과 같습니다.

선택한 경우에 운영자가 사전 정의된 연산자,반환하는 경우 타입의 선택 연산자를 명시적으로 컨버터블의 유형 x,y 경우에는 암시적으로 컨버터블의 유형 x 거나 운영자가 변화 연산자는 다음 작업으로 평가 x = (T)(x op y), T 유형 x 의 것을 제외하고,x 평가 있습니다.

불행하게도,귀하의 유일한 수단은 그것을 당신.이 없는 접미사를 표시 문자로 바이트입니다.|연산자를 제공하지 않습에 대한 암시적으로 변환로 할당(i.e초기화)것입니다.

분명히 식'규칙| 0x80'int 를 반환합니다 경우에도 당신 정의 0x80 로'const byte0x80'.

내가 생각하는 규칙은 번호를 다음과 같 0x80 기본값 int 지 않는 한 당신이 포함 리터럴 접미사입니다.그래서 표현에 대 한 rule | 0x80, 그 결과 int 때 0x80 이 int 및 규칙(바이트)할 수 있다 변환 int.

에 따라 C 표준,바이트는 항상을 촉진하 int 식에서,심지어 상수입니다.그러나 값이 모두 서명되지 않은 고기 위해 비트 버릴 것이기 때문에 작업을 반환해야 합니다 올바른 값입니다.

마찬가지로,수레를 촉진하중,etc.

밖으로 끌어의 사본의 K&R.그것은 모두 거기에있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top