mirror of
https://github.com/golang/go
synced 2024-11-25 07:47:56 -07:00
talk about short, int, long etc.
specify allowed conversions. SVN=117458
This commit is contained in:
parent
76abea7c6d
commit
5e391cff2c
@ -296,8 +296,6 @@ and floating point types:
|
|||||||
uint32 the set of all unsigned 32-bit integers
|
uint32 the set of all unsigned 32-bit integers
|
||||||
unit64 the set of all unsigned 64-bit integers
|
unit64 the set of all unsigned 64-bit integers
|
||||||
|
|
||||||
byte alias for uint8
|
|
||||||
|
|
||||||
int8 the set of all signed 8-bit integers, in 2's complement
|
int8 the set of all signed 8-bit integers, in 2's complement
|
||||||
int16 the set of all signed 16-bit integers, in 2's complement
|
int16 the set of all signed 16-bit integers, in 2's complement
|
||||||
int32 the set of all signed 32-bit integers, in 2's complement
|
int32 the set of all signed 32-bit integers, in 2's complement
|
||||||
@ -307,13 +305,26 @@ and floating point types:
|
|||||||
float64 the set of all valid IEEE-754 64-bit floating point numbers
|
float64 the set of all valid IEEE-754 64-bit floating point numbers
|
||||||
float80 the set of all valid IEEE-754 80-bit floating point numbers
|
float80 the set of all valid IEEE-754 80-bit floating point numbers
|
||||||
|
|
||||||
Additionally, Go declares 4 basic types, uint, int, float, and double,
|
Additionally, Go declares several platform-specific type aliases:
|
||||||
which are platform-specific. The bit width of these types corresponds to
|
ushort, short, uint, int, ulong, long, float, and double. The bit
|
||||||
the ``natural bit width'' for the respective types for the given
|
width of these types is ``natural'' for the respective types for the
|
||||||
platform. For instance, int is usally the same as int32 on a 32-bit
|
given platform. For instance, int is usually the same as int32 on a
|
||||||
architecture, or int64 on a 64-bit architecture. These types are by
|
32-bit architecture, or int64 on a 64-bit architecture.
|
||||||
definition platform-specific and should be used with the appropriate
|
|
||||||
caution.
|
The integer sizes are defined such that short is at least 16 bits, int
|
||||||
|
is at least 32 bits, and long is at least 64 bits (and ditto for the
|
||||||
|
unsigned equivalents). Also, the sizes are such that short <= int <=
|
||||||
|
long. Similarly, float is at least 32 bits, double is at least 64
|
||||||
|
bits, and the sizes have float <= double.
|
||||||
|
|
||||||
|
Also, ``byte'' is an alias for uint8.
|
||||||
|
|
||||||
|
Finally, a type ptrint is defined. It is an unsigned integer type
|
||||||
|
that is the smallest natural integer type of the machine large enough
|
||||||
|
to store the uninterpreted bits of a pointer value.
|
||||||
|
|
||||||
|
Generally, programmers should use these types rather than the explicitly
|
||||||
|
sized types to maximize portability.
|
||||||
|
|
||||||
Two reserved words, "true" and "false", represent the
|
Two reserved words, "true" and "false", represent the
|
||||||
corresponding boolean constant values.
|
corresponding boolean constant values.
|
||||||
@ -1290,6 +1301,33 @@ TODO: are there parameters to any conversions? go.y has oexpr_list as the
|
|||||||
contents of a TypeName() conversion; i expected expr instead and that's what
|
contents of a TypeName() conversion; i expected expr instead and that's what
|
||||||
the others have.
|
the others have.
|
||||||
|
|
||||||
|
Only some conversions are permitted.
|
||||||
|
|
||||||
|
1) Between integer types. If the value is a signed quantity, it is
|
||||||
|
sign extended to implicit infinite precision; otherwise it is zero
|
||||||
|
extended. It is then truncated to fit in the destination type size.
|
||||||
|
For example, uint32(int8(0xFF)) is 0xFFFFFFFF. The conversion always
|
||||||
|
yields a valid value; for instance, there is no signal for overflow.
|
||||||
|
|
||||||
|
2) Between integer and floating point types, or between floating point
|
||||||
|
types. To avoid overdefining the properties of the conversion, for
|
||||||
|
now we define it as a ``best effort'' conversion. The conversion
|
||||||
|
always succeeds but the value may be a NaN or other problematic
|
||||||
|
result. TODO: clarify?
|
||||||
|
|
||||||
|
3) Conversions between interfaces and compatible interfaces and struct
|
||||||
|
pointers. Invalid conversions (that is, conversions between
|
||||||
|
incompatible types) yield nil values. TODO: is nil right here? Or
|
||||||
|
should incompatible conversions fail immediately?
|
||||||
|
|
||||||
|
4) Conversions between ``any'' values and arbitrary types. Invalid
|
||||||
|
conversions yield nil values. TODO: is nil right here? Or should
|
||||||
|
incompatible conversions fail immediately?
|
||||||
|
|
||||||
|
Note that there is no linguistic mechanism to convert between pointers
|
||||||
|
and integers. A library may be provided under restricted circumstances
|
||||||
|
to acccess this conversion in low-level code but it will not be available
|
||||||
|
in general.
|
||||||
|
|
||||||
The constant generator 'iota'
|
The constant generator 'iota'
|
||||||
----
|
----
|
||||||
|
Loading…
Reference in New Issue
Block a user