2010-02-07 5 views
2

a) 숫자 100은 int 리터럴이고 컴파일러에서 암시 적 변환을 허용하지 않으므로 다음 할당에서 오류가 발생하지 않아야합니다.리터럴 및 암시 적 변환의 변환

byte b = 100; 


b)는 컴파일러가 INT 문자에 입력 바이트에서 암시 적 축소 변환에 대해 불평하지 않는 경우, 이유는 이중 에서 암시 적 축소 변환을 허용하지 않습니다 literal to float (F/f 접미어를 사용하여 float 리터럴을 지정하면이 오류를 피할 수 있습니다.)


byte b=16; //OK 
float f1=16.9; //error 

이는 C# 언어 사양의 섹션 6.1.8에 덮여 당신

+0

부동 소수점 변환에 관한 규칙은 역순이지만, 그들은. 'float f = (float) (1.0/10.0);'이 타입 변환을 필요로하는 좋은 이유는 없습니다 ('f'는 타입에 대해 0.1의 가장 정확한 표현을 유지할 것입니다). 그러나'double d = 1.0f/10.0 f '는'd '에 할당 된 값이 (이중 정밀도와 관련하여) 아무 곳에도 0.1에 가깝지 않더라도 경고없이 컴파일됩니다. – supercat

답변

4

감사합니다. 값이 타겟 타입의 범위 내에 있으면, int 타입의 상수 표현을 sbyte, byte, short, ushort, uint 또는 ulong으로 변환하는 것은 합법입니다. C# 컴파일러가 값이 적절한 범위 내에 있는지 확인하여 변환을 허용하는 것이 매우 쉽습니다.

두 가지 경우에 대해 C# lang 사양은 이것이 허용되지 않는 이유를 명시하지 않습니다. 내 생각 엔 double 값이 float 값에 들어갈 수 있는지를 결정하는 것이 어렵다는 것입니다. 부동 소수점 정밀도를 정확하게 얻는 것은 매우 어려운 일이며 아마 그렇게 많은 비용이 들지는 않습니다. (가능하다면)

+0

도움에 감사드립니다. – AspOnMyNet