84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
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를 부호 있는 숫자로 간주하고 후속 계산 및 출력은 부호 있는 숫자로 처리됩니다.