GCC 컴파일러를 사용하여 Linux에서 다음 프로그램을 실행하면 출력은 무엇입니까?
으아아아유형 변환, 데이터 자르기 및 채우기가 포함된다는 점만 알아두세요. 그런데 구체적인 설명을 모르시나요?
원래 질문 출처: Linux에서 C 언어로 된 몇 가지 고전적인 인터뷰 질문
巴扎黑2017-06-26 11:01:02
char
的长度是 1 字节,并且,大多数的机器都将其视为有符号数的,所以它的表示范围是 [-128, 127]
(参见《深入理解计算机系统》P27~P28)。所以,当你给 c
赋值 127 时,你执行了 ++c
그러면 1바이트만 있기 때문에 오버플로가 발생합니다.
는 기계에서 127을 나타내며 이진수로 변환하면 다음과 같습니다. 01111111
,可以看到,当你加 1 之后,结果就变成了 10000000
,由于在计算机内部,负数是用补码来表示的,所以就变成了 -128。之后再 ++c
, 즉 -127입니다.
다양한 유형의 경우 메모리 조각인 컴퓨터 내부에서 모두 동일하게 작동합니다. 따라서 유형에는 제한이 없습니다.
天蓬老师2017-06-26 11:01:02
이 질문은 언어가 아닌 编译器
테스트입니다.
3개의 변수 정의:
C 언어에서는 c가 계산에 참여할 때 c가 s_c로 변환될지 u_c로 변환될지는 编译器
에 의해 결정됩니다.
gcc는 c를 부호 있는 숫자로 간주하고 후속 계산 및 출력은 부호 있는 숫자로 처리됩니다.