찾다

 >  Q&A  >  본문

Linux에서 C 언어로 된 고전적인 인터뷰 질문

GCC 컴파일러를 사용하여 Linux에서 다음 프로그램을 실행하면 출력은 무엇입니까?

으아아아

유형 변환, 데이터 자르기 및 채우기가 포함된다는 점만 알아두세요. 그런데 구체적인 설명을 모르시나요?

원래 질문 출처: Linux에서 C 언어로 된 몇 가지 고전적인 인터뷰 질문

过去多啦不再A梦过去多啦不再A梦2703일 전1124

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-06-26 11:01:02

    char 的长度是 1 字节,并且,大多数的机器都将其视为有符号数的,所以它的表示范围是 [-128, 127](参见《深入理解计算机系统》P27~P28)。所以,当你给 c 赋值 127 时,你执行了 ++c 그러면 1바이트만 있기 때문에 오버플로가 발생합니다.

    는 기계에서 127을 나타내며 이진수로 변환하면 다음과 같습니다. 01111111,可以看到,当你加 1 之后,结果就变成了 10000000,由于在计算机内部,负数是用补码来表示的,所以就变成了 -128。之后再 ++c, 즉 -127입니다.

    다양한 유형의 경우 메모리 조각인 컴퓨터 내부에서 모두 동일하게 작동합니다. 따라서 유형에는 제한이 없습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-06-26 11:01:02

    이 질문은 언어가 아닌 编译器 테스트입니다.
    3개의 변수 정의:

    으아악

    C 언어에서는 c가 계산에 참여할 때 c가 s_c로 변환될지 u_c로 변환될지는 编译器에 의해 결정됩니다.

    gcc는 c를 부호 있는 숫자로 간주하고 후속 계산 및 출력은 부호 있는 숫자로 처리됩니다.

    회신하다
    0
  • 취소회신하다