>

지금 당장

long long x = 1 << 60;
cout << x << endl;

그리고 오랫동안 오랫동안 사용할 수있는 범위는 2^64 까지 올 수 있음을 알고 있습니다. 하지만 어떤 이유로 코드를 실행하면 " left shift count >= width of type [-Wshift-count-overflow]. "라는 경고가 표시됩니다. "

또한 0  화면에 인쇄됩니다. 분명히 내가 원하는 것이 아닙니다.

문자 뒤에 "ll"을 넣으려고했지만 어디에 두어야할지 모르겠습니다 :

long long x = (1 << 60)ll;
long long x = (1 << 60ll);

아무것도 작동하지 않습니다

이 문제를 해결하는 방법을 알려주시겠습니까? 미리 감사드립니다!

  • 답변 # 1

    이 표현을 기대하는 것은 흔한 실수입니다 :

    long long x = 1 << 60;
    
    

    그 유형의 왼쪽은 오른쪽 계산에 영향을 미칩니다. 1 << 60 의 결과는 아닙니다  왼쪽의 유형으로 변환되었지만 1 << 60 의 계산에는 영향을 미치지 않습니다.  그 자체. 따라서 올바른 해결책은 1 의 유형을 변경하는 것입니다 :

    long long x = static_cast<long long >( 1 ) << 60;
    
    

    또는

    long long x = 1LL << 60;
    
    

    또는 심지어

    auto x = 1LL << 60;
    
    

  • 이전 java - jSpinners의 ArrayList에서 값을 변경하는 방법은 무엇입니까?
  • 다음 c# - Visual Studio에서 테스트가 개별적으로 성공하고 집합에서 실패