나는 모든 짝수 색인 바이트를 int로 복사하고있는 바이트 버퍼에 대한 포인터를 가지고 있습니다. 왜냐하면 (데이터가 버퍼에 저장되는 프로토콜 때문에 홀수 사이클은 읽음을 알고 있기 때문입니다). 지금 내가 이것을 할 때C는 부호 확장을 어떻게 처리합니까?
signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned
그것은 나에게 부호없는 수를 준다. 그러나 내가 이것을 할 때
a = (int8_t)buffer[2*i]
숫자는 서명 된 형식으로 표시됩니다. 그것은 내가 위와 같은 시나리오에서 특히 c에서 기호 확장을 재고하는 것을 강요합니다. 필자는 서명 한대로 컴파일 할 것이므로 컴파일러는 자동으로 서명 확장을 수행합니다. 아무도 왜 이것이 사실이 아닌지 설명하기 위해 시간을 할애 할 수 있습니까? 방금이 함정에서 1 시간을 보냈다가 나중에 다시 같은 함정에 빠지기를 원하지 않습니다.
좋은 읽기 http://www.cs.umd.edu/class/sum2003/cmsc311/Notes /Data/signExt.html –
C에서 부호 확장이 작동하는 방식을 알고 있지만 부호없는 숫자 (부호 비트가 1)가 있고 더 긴 정수로 캐스팅하여 부호가 확장되는 경우 그 처리 방법 ? 죄송합니다. 질문에서 명확하지 않은 경우. – as3rdaccount