문제

.NET 프로그램에서 이상한 행동을 목격하고 있습니다.

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

int64.maxvalue가 64 비트를 사용하고 있음을 확인하는 것처럼 보이지만 내 int64가 왜 int32 인 것처럼 행동합니까?

관련이있는 경우 32 비트 OS를 사용하고 있으며 대상 플랫폼이 "모든 CPU"로 설정됩니다.

도움이 되었습니까?

해결책

RHS는 만 사용 중입니다 Int32 값이므로 전체 작업을 사용하여 수행됩니다 Int32 산술, 그런 다음 Int32 결과 오랫동안 홍보됩니다.

이것으로 변경하십시오.

Int64 a = 256*256*256*128L;

그리고 모두 잘 될 것입니다.

다른 팁

사용:

Int64 a = 256L*256L*256L*128L;

L 접미사는 int64 문자를 의미하며 접미사는 int32를 의미합니다.

당신이 쓴 것 :

Int64 a = 256*256*256*128

수단:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top