내 .NET int64가 마치 int32 인 것처럼 동작하는 이유는 무엇입니까?
-
06-07-2019 - |
문제
.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;
제휴하지 않습니다 StackOverflow