나는 How can one simplify network byte-order conversion from a BinaryReader?을 읽었으며이 질문의 초기 코드는 UInt32
과 Int32
사이의 명시 적 형 변환 기능에 대해 생각하게했습니다. 내 주요 관심사는 Int32.MaxValue
보다 크거나 0
보다 작은 값입니다.캐스팅 UInt32에서 Int32 : 다른 컴파일러 결과
이 캐스트가 동일해야하지만, 하나의 작품과 다른 오류가 발생합니다
public static void TestConverstion()
{
// runs just fine, CastBack == aUInt
UInt32 aUInt = UInt32.MaxValue; // 4294967295
Int32 anInt = (Int32)aUInt; // -1
UInt32 castBack = (UInt32)aUInt; // 4294967295
// Build Error: Constant value '4294967295' cannot be converted to a 'int' (use 'unchecked' syntax to override)
UInt32 oneLineCastBack = (UInt32)(Int32)UInt32.MaxValue;
}
이유는 유효 하나가 아닌 다른입니다?
이 캐스트의 동작은 어디에서 문서화되어 있습니까? 가장 좋은 문서는 Explicit Numeric Conversions Table (C# Reference)으로, 명시 적 형변환이 있음을 인정하지만 명시 적 형변환은 "정밀도를 잃거나 예외를 throw 할 수 있습니다"라고 경고합니다. 실험에서 예외가 발생하지 않으며 정밀도가 손실되지 않는다고 말합니다.
UInt32 Structure는 제안이 UInt32
당신이 Int32.MaxValue
이상하지만 UInt32.MaxValue
이하의 값을 나타 내기 위해 필요할 때 그냥 Int64
을 사용하고 절반 비트를 낭비해야 Common Language Specification의 일부가 아니기 때문에.
문서화 된 부분은 어디입니까? http://msdn.microsoft.com/en-us/library/2xf6xbyc.aspx, http://msdn.microsoft.com/en-us/library/aa288039.aspx. MSDN은 기본적인 내용에 대해 거의 모든 질문에 대답 할 수 있습니다. – cHao
첫 번째 변수가'변수 '이므로 컴파일러는 두 번째 변수가'상수 '인 경우 컴파일러가 추측 할 수없는 것을 알 수 있으므로 컴파일러가 범위를 알고 오류로 불만을 제기합니다. –
Convert.ToInt32 (uint)는 (Int32) (uint)와 동일한 작업입니까? –