최근에는 C, char/unsigned char/signed char의 세 가지 유형에 관한 문제를 읽었습니다. 필자가 지금 직면 한 문제는 지금까지 경험하지 못한 문제 (내 프로그램은 테스트 된 모든 컴퓨터에서 제대로 작동하고 리틀 엔디안 (Windows/Linux를 사용하는 기본적으로 모든 현대 데스크톱과 서버를 대상으로합니까?)을 대상으로합니다. array "string"(실제 문자열이 아닌)을 임시 변수로 유지하기 위해 정의했습니다. 예를 들어 스택에 다른 char을 추가하는 대신 array [0]과 같은 멤버 중 하나만 재사용합니다. 그러나이 전략을 나는 그것을 실제로 구현에 따라 오늘 읽을 때까지 문자가 항상 서명 될 수 있다는 사실. 내가 지금 문자를 가지고 있고 그것에 음의 값을 할당하면 무슨 일이 일어날 지?C 캐스트와 char 서명
char unknownsignedness = -1;
내가 쓴 경우
unsigned char A = -1;
C 스타일 캐스트는 비트를 다시 해석하고 A가 부호없는 유형으로 나타내는 값이 달라진다 고 생각합니다. 나는이 C 스타일의 캐스트가 단순히 비트의 재 해석이라고 맞습니까? 이제 서명 된 < -> 서명되지 않은 전환을 언급하고 있습니다.
구현에서 char가 서명되지 않은 경우 내 프로그램이 의도 한대로 작동하지 않습니까? 지금 내가 지금 서명 된 char 값에 서명 숯불을 비교하고
if (A == -1)
을 할 경우, 마지막 변수를 가지고, 그래서 이것은 단순히 부호의에 대해 걱정하지 비트를 비교합니다 또는이 false를 반환합니다 분명 A는 할 수 없기 때문에 -1일까요? 나는이 경우에 어떤 일이 일어나는지 혼란 스럽다. 이것은 또한 자주 쓰는 숯을 사용하면서 가장 큰 관심사입니다. (: C++,하지만 내 추론에 대한 설명을 참조 경고) :
무엇이 주조합니까? 어디에도 캐스팅이 없습니다. 그리고 바이너리 (문자가 아닌) 데이터를 저장하려면 더 나은 (IMO)'int8_t' 또는'uint8_t' 표준 유형을 사용하십시오. –
내 구현은 C99을 지원하지 않습니다. int8_t가 해당 버전의 코드라고 생각했습니다. – user209347
부호없는 값에 부호가있는 값을 할당하면 캐스팅이 없을까요? 또는 데이터 크기가 일치하지 않을 때만 형 변환이 발생합니까? – user209347