2013-03-14 3 views
0

C에서 서명 된 문자와 서명되지 않은 문자는 무엇이 필요합니까?C에서 서명 및 서명되지 않은 문자가 필요합니다

C에서 서명 및 서명되지 않은 문자가있는 특별한 이유가 있습니까? 또는 서명자/부호없는 수정자를 추가하기 전에 컴파일러가 데이터 유형을 확인할 필요가 없도록 완전성을 위해 단순히 추가 되었습니까?

서명 된 변수와 부호없는 변수에 대해 묻지 않습니다. 내 의심은 서명되지 않은 문자 변수가 충분하지 않아 서명 된 문자 변수에 의존해야하는 특별한 경우에 관한 것입니다.

+0

http://en.wikipedia.org/wiki/Signed_number_representations –

+0

'서명 된 변수와 부호없는 변수에 대해 묻지 않았습니다. ' 정확히 설명하는 답변을 수락했습니다. 호기심에서 벗어난 이유는 무엇입니까? 나는 그것이 당신이 찾고있는 것인지 물으면 무슨 뜻인지 완전히 확신하지 못합니다. – Hydronium

+0

특별히 서명 된/서명되지 않은 문자 변수가 필요한 문제를 찾고 싶었습니다. 나는 그 효과에 대한 어떤 대답도 얻지 못했기 때문에, 결국 그와 같은 문제가 없을 수도 있다고 결론을 내린다. 따라서 대답은 받아 들여진다. 왜 다른 사람들에게 시간 낭비 :). 그러나 당신이 모범을 보일 수 있다면 나는 가장 의무감을 느낄 것입니다. – Deepu

답변

3

char은 기본 하드웨어에 가장 효율적인 점에 따라 부호가 있거나 부호가 없습니다. 키워드 signedunsigned을 사용하면 원하는 것을 명시 적으로 지정할 수 있습니다.

C99의 이론적 근거에서 인용 : char

세 가지 유형이 지정됩니다 signed, 일반 및 unsigned. 일반 char은 이전 연습에서와 같이 구현에 따라 부호 또는 부호 없음으로 표현 될 수 있습니다. 코드 signed charcharunsigned char으로 구현 한 시스템에서 1 바이트 부호있는 정수 유형을 사용할 수 있도록 C89에 도입되었습니다. 대칭의 이유로 키워드 signed은 다른 정수 유형의 유형 이름의 일부로 허용됩니다.

0

이해해야 할 점은 데이터 유형 "char"는 실제로는 일반적으로 8 비트 넓이의 정수라는 것입니다. 감소 된 값의 한계를 존중한다고 가정 할 때 다른 모든 inter 데이터 유형과 마찬가지로 사용할 수 있습니다. 문자에 "char"을 제한 할 이유가 없습니다.

32/64 비트 프로세서의 경우 일반적으로 작은 정수 필드를 사용할 필요가 없지만 8051과 같은 8 비트 프로세서에서 8 비트 정수는 처리 및 사용 속도가 더 빠를뿐만 아니라 적은 (제한된) 메모리.

+0

왜 downvotes? –

+1

두 번째 단락은 잘못된 정보를 제공합니다. 32/64 비트 프로세서가 문자를 사용할 필요가없는 이유는 무엇입니까? 여전히 메모리 및 메모리 액세스를 저장합니다. – 75inchpianist

1

문자가 아닌 숫자를 저장하기 위해 char을 사용한다고 가정합니다.

so :

부호있는 문자는 최소한 -128에서 127 사이의 범위를 제공합니다. unsigned char는 최소한 0에서 255 사이의 범위를 제공합니다.

char는 표준에서 적어도 8 비트 이상이어야하므로, 적어도 그렇게 말합니다. 이 값은 더 커질 수 있습니다.

어쨌든, 귀하의 질문에 대답하기 위해, 서명되지 않은 문자로 첫 번째 비트에 대한 요구 사항을 자유롭게 해줄 수 있습니다.

2

정보 # 1 : C에서char 8 비트를 사용하는, 단지 작은 int이다.

정보 # 2 : 차이 signed 내지 unsigned은 표현의 하나의 비트가 signed 변수 부호 비트로서 사용된다는 점이다.

정보 # 3 : (2) signed 변수 (char 경우에는 0 ~ 255)에 비해 unsigned 다른 범위 (127 -128, char 경우) 유지의 결과로서.

Q-A # 1 :unsigned이 필요합니까?

대부분의 경우 (예 : 포인터를 나타내는 경우) 부호있는 변수가 필요하지 않습니다. 규칙 상 메모리의 모든 위치는 연속되지 않은 주소 배열로 프로그램에 노출됩니다.

Q-A # 2 :signed이 필요합니까?

일반적으로 부호가있는 산술 연산을 수행합니다.

관련 문제