2012-07-07 3 views
1

빅 엔디 언 컴퓨터에서 long 변수를 가지고 char으로 캐스팅 한 경우 언어 사양에 따라 캐스트 한 후 최하위 비트를 얻을 수 있습니까? 즉빅 엔디안에서의 정수 캐스팅

:

나는이 작은 엔디안 기계에 대한 사실을 알고
long a = 50; 
char b = (char)a; 
assert(b == 50); /* Is it true? */ 

,하지만 빅 엔디안은 어떻습니까?

+1

그것은 엔디 언 함께 할 수 없다, 당신은 다른 형식으로 변환 값을 가져, 가능하다면. –

답변

5

... 대상 유형 (및 비트 필드 너비)으로 표현할 수있는 값은 변경되지 않습니다. 그렇지 않은 경우, 값은 구현 정의입니다. (§4.7/3). char 이후

적어도 127까지,이 경우 결과가 있어야합니다 값을 수용 할 수 있어야합니다 (50)

+0

나는 다른 쪽 endiannes로 인해 "lower byte"와 "long byte"의 "upper byte"를 붙잡는 지 여부에 상관없이, OP를 캐스팅함으로써 궁금해하고있다. –

+0

@JimBuck 네, 저의 실제적인 의심이었습니다. 표준은 바이트가 아니라 값에 대해 말하고 있기 때문에 컴파일러가 long의 "상위 바이트"를 char 내부에 배치함으로써 가장 명백한 방식으로이 작업을 수행한다고 가정합니다. – lvella

+0

@lvella : 아니요, 아무 것도 없으면 최소 * 중요 바이트를 대상에 복사합니다. 최상위 비트를 복사하는 것이 적합하면 값을 유지하지 않습니다. –

1

예. 그렇지 않으면 많은 코드가 손상됩니다.