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