[ Pobierz całość w formacie PDF ]

60 Copyright Microsoft Corporation 1999-2000. All Rights Reserved.
Chapter 4 Types
" For the unary + and ~ operators, the operand is converted to type T, where T is the first of int, uint, long,
and ulong that can fully represent all possible values of the operand. The operation is then performed using
the precision of type T, and the type of the result T.
" For the unary  operator, the operand is converted to type T, where T is the first of int and long that can
fully represent all possible values of the operand. The operation is then performed using the precision of
type T, and the type of the result is T. The unary  operator cannot be applied to operands of type ulong.
" For the binary +,  , *, /, %, &, ^, |, ==, !=, >, =, and
where T is the first of int, uint, long, and ulong that can fully represent all possible values of each
operand. The operation is then performed using the precision of type T, and the type of the result is T (or
bool for the relational operators).
" For the binary operators, the left operand is converted to type T, where T is the first of int,
uint, long, and ulong that can fully represent all possible values of the operand. The operation is then
performed using the precision of type T, and the type of the result T.
The char type is classified as an integral type, but it differs from the other integral types in two ways:
" There are no implicit conversions from other types to the char type. In particular, even though the sbyte,
byte, and ushort types have ranges of values that are fully representable using the char type, implicit
conversions from sbyte, byte, or ushort to char do not exist.
" Constants of the char type must be written as character-literals. Character constants can only be written as
integer-literals in combination with a cast. For example, (char)10 is the same as '\x000A'.
The checked and unchecked operators and statements are used to control overflow checking for integral-type
arithmetic operations and conversions (§7.5.13). In a checked context, an overflow produces a compile-time
error or causes an OverflowException to be thrown. In an unchecked context, overflows are ignored and
any high-order bits that do not fit in the destination type are discarded.
4.1.5 Floating point types
C# supports two floating point types: float and double. The float and double types are represented using
the 32-bit single-precision and 64-bit double-precision IEEE 754 formats, which provide the following sets of
values:
" Positive zero and negative zero. In most situations, positive zero and negative zero behave identically as the
simple value zero, but certain operations distinguish between the two.
" Positive infinity and negative infinity. Infinities are produced by such operations as dividing a non-zero
number by zero. For example 1.0 / 0.0 yields positive infinity, and  1.0 / 0.0 yields negative infinity.
" The Not-a-Number value, often abbreviated NaN. NaN s are produced by invalid floating-point operations,
such as dividing zero by zero.
" The finite set of non-zero values of the form s × m × 2e, where s is 1 or -1, and m and e are determined by
the particular floating-point type: For float, 0
and -1075 = e = 970.
The float type can represent values ranging from approximately 1.5 × 10-45 to 3.4 × 1038 with a precision of 7
digits.
The double type can represent values ranging from approximately 5.0 × 10-324 to 1.7 × 10308 with a precision of
15-16 digits.
If one of the operands of a binary operator is of a floating-point type, then the other operand must be of an
integral type or a floating-point type, and the operation is evaluated as follows:
Copyright Microsoft Corporation 1999-2000. All Rights Reserved. 61
C# LANGUAGE REFERENCE
" If one of the operands of is of an integral type, then that operand is converted to the floating-point type of
the other operand.
" Then, if either of the operands is of type double, the other operand is converted to double, the operation is
performed using at least double range and precision, and the type of the result is double (or bool for the
relational operators).
" Otherwise, the operation is performed using at least float range and precision, and the type of the result is
float (or bool for the relational operators).
The floating-point operators, including the assignment operators, never produce exceptions. Instead, in
exceptional situations, floating-point operations produce zero, infinity, or NaN, as described below:
" If the result of a floating-point operation is too small for the destination format, the result of the operation
becomes positive zero or negative zero.
" If the result of a floating-point operation is too large for the destination format, the result of the operation
becomes positive infinity or negative infinity.
" If a floating-point operation is invalid, the result of the operation becomes NaN.
" If one or both operands of a floating-point operation is NaN, the result of the operation becomes NaN.
Floating-point operations may be performed with higher precision than the result type of the operation. For
example, some hardware architectures support an  extended or  long double floating-point type with greater
range and precision than the double type, and implicitly perform all floating-point operations using this higher
precision type. Only at excessive cost in performance can such hardware architectures be made to perform
floating-point operations with less precision, and rather than require an implementation to forfeit both
performance and precision, C# allows a higher precision type to be used for all floating-point operations. Other
than delivering more precise results, this rarely has any measurable effects. However, in expressions of the form
x * y / z, where the multiplication produces a result that is outside the double range, but the subsequent
division brings the temporary result back into the double range, the fact that the expression is evaluated in a
higher range format may cause a finite result to be produced instead of an infinity.
4.1.6 The decimal type
The decimal type is a 128-bit data type suitable for financial and monetary calculations. The decimal type
can represent values ranging from 1.0 × 10-28 to approximately 7.9 × 1028 with 28-29 significant digits.
The finite set of values of type decimal are of the form s × m × 10e, where s is 1 or  1, 0 = m [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ssaver.htw.pl