사실 내가 반복적으로 타이핑하지 않고 반복해야하는 특정 코드 블록을 사용할 수 있도록 루핑을 사용하여 코드를 더욱 효율적으로 만드는 방법을 연구했습니다. 시도한 후 지금까지 배운 것을 사용하여 무언가를 프로그램 할 때 다음 장으로 넘어가 제어 문을 사용하여 프로그램이 지시를 내리는 방법을 배우는 시간이 있다고 생각합니다.C 인수 프로모션에 관한 질문
하지만 내가 사전에 들어가기 전에 나는 이전의 물건에 대한 전문가의 도움이 필요한 질문이 몇 가지 있습니다. 사실 그것은 데이터 유형에 관한 것입니다.
A. 문자 유형
- 나는 책 C 프라이머 플러스 5 편에서 다음 추출 :
다소 이상한, C 유형으로 문자 콘스탄스 취급을
char
대신int
입니다. 예를 들어, 32 비트int
와 ASCII 시스템 8 비트char
에, 코드 :char grade = 'B';
(66)는 32 비트 단위로 저장되어있는 수치로서
'B'
을 나타내고grade
ub ab 8 비트 유닛을 66 개 저장 한 상태로 바람을 맞 춥니 다. 문자 상수의이 특성은'FATE'
, 과 같은 문자 상수를 으로 정의 할 수 있습니다.이 상수는 4 개의 개별 8 비트 ASCII 코드 이 32 비트 단위로 저장되어 있습니다. 그러나 변수를 변수에 할당하려고 시도하면 변수 결과는 이고 마지막 8 비트는 이므로 값은'E'
이됩니다.
그래서이 물론 있었다 읽은 후했던 다음 일은, 그것이 내가
char grade
와 변수에 단어FATE
를 저장하려고 컴파일하고 무엇을 거 볼려고, 그것은 언급 팔로우printf()
을 사용하여 저장해야하지만, 문자'E'
을 인쇄하는 대신, 내가 얻는 것은'F'
입니다.책에 실수가 있습니까? 또는 내가 오해 한 것이 있습니까?
위의 문장에서 C는 문자 상수를
int
으로 처리합니다. 그래서 그것을 시도하기 위해char
유형에255
(e.x.356
)보다 큰 숫자를 할당합니다.356
이후그러므로 나는 내가
%d
지정자를 사용할 때356
을 인쇄 할 것으로 예상, 32 비트int
(I 윈도우 7을 실행 해요)의 범위 내에있다.그러나
356
을 인쇄하는 대신 마지막 8 비트 값인100
이 표시됩니다.왜 이런 일이 발생합니까? 나는
char == int == 32-bits
을 생각 했는가? (char 앞에는 언급하지 않지만 바이트는입니다.)
B. 지능 및 부동 유형
내가
short
유형의 변수에 숫자를 저장하는 가변 기능 또는 암시 적 프로토 타입 함수에 전달할 때, 그것은거야 이해int
유형으로 자동 승격됩니다.float
유형에 대한 지정은 없습니다 대신에만%f
에 대한이 왜 이것은 또한float
유형의 부동 소수점 숫자가 전달 될 때, 그것은double
유형으로 변환 할 수 있습니다, 지점 유형을 떠 일어날, 즉
double
및%Lf
은long double
입니다.그러나 승격되었지만
float
유형이 아닌데도short
유형의 지정자가 있습니까?%hf
또는 이와 비슷한 수식어와 함께float
유형의 지정자를 제공하지 않는 이유는 무엇입니까? 이것 뒤에 논리적이거나 기술적 인 것이 있습니까? A를
char는 항상 1 바이트이므로 범위를 초과하여 저장할 때 부호없는 경우에는 줄 바꿈됩니다. 랩핑할지 어떨지는 구현에 의존하지만, 일반적으로 -ve에 랩합니다. 필자는 '운명'문제는 기계 바이트 순서 및 아마도 구현 의존성과 관련이 있다고 생각한다. 출력으로 'E'를 얻는다. – phoxis
바이트 단위로 8 비트를 의미한다면, 그렇지 않습니다. http://www.ibm.com/developerworks/power/library/pa-ctypes1/#N1007D – Joe
제발, 한 번에 10 가지 질문을하지 마십시오. 이것은 토론 포럼이 아닙니다. –