Go Integers: Difference between revisions
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
=External= | |||
* https://go.dev/ref/spec#Numeric_types | |||
=Internal= | =Internal= | ||
* [[Go Language#Integers|Go Language]] | * [[Go Language#Integers|Go Language]] | ||
Line 7: | Line 9: | ||
In most cases, we simply declare an <code>int</code> (signed integer) or <code>uint</code> (unsigned integer) and leave it to the compiler to allocate the right type of integer, depending on the underlying architecture. If we want to get specific, we can use: | In most cases, we simply declare an <code>int</code> (signed integer) or <code>uint</code> (unsigned integer) and leave it to the compiler to allocate the right type of integer, depending on the underlying architecture. If we want to get specific, we can use: | ||
* Unsigned integers represented on the specified number of bits: <code>uint8</code> (<code>byte</code>), <code>uint16</code>, <code>uint32</code> (<span id='Rune'></span><code>rune</code>, also see [[Go_Strings#Rune|strings]]), <code>uint64</code>. | * Unsigned integers represented on the specified number of bits: <code>uint8</code> (<code>byte</code>), <code>uint16</code>, <code>uint32</code> (<span id='Rune'></span><span id='rune'></span><code>rune</code>, also see [[Go_Strings#Rune|strings]]), <code>uint64</code>. | ||
* Signed integers, represented on the specified number of bits: <code>int8</code>, <code>int16</code>, <code>int32</code>, <code>int64</code>. Internally they are stored in [[Two's Complement Representation|2's complement representation]]. | * Signed integers, represented on the specified number of bits: <code>int8</code>, <code>int16</code>, <code>int32</code>, <code>int64</code>. Internally they are stored in [[Two's Complement Representation|2's complement representation]]. | ||
* Machine-dependent integers: <code>uint</code>, <code>int</code> and <code>uintptr</code>. <code>int</code>, for example, can be 4 bytes or 8 bytes long, depending on the underlying architecture. | * Machine-dependent integers: <code>uint</code>, <code>int</code> and <code>uintptr</code>. <code>int</code>, for example, can be 4 bytes or 8 bytes long, depending on the underlying architecture. | ||
Line 14: | Line 16: | ||
The uninitialized value is <code>0</code>. | The uninitialized value is <code>0</code>. | ||
=Integer Variable Declaration= | =Integer Variable Declaration= | ||
<syntaxhighlight lang='go'> | <syntaxhighlight lang='go'> | ||
var i int // string type declaration without initialization | var i int // string type declaration without initialization | ||
i = 1 // initialization after declaration | i = 1 // initialization after declaration | ||
var i2 int = 2 | var i2 int = 2 // variable initialization in declaration | ||
var i3 = 3 // variable initialization with type inference | var i3 = 3 // variable initialization with type inference | ||
i4 := 4 // short variable declaration | i4 := 4 // short variable declaration | ||
</syntaxhighlight> | |||
=Max and Min Values= | |||
Available as costs in the <code>math</code> package: | |||
<syntaxhighlight lang='go'> | |||
const ( | |||
MaxInt = 1<<(intSize-1) - 1 // MaxInt32 or MaxInt64 depending on intSize. | |||
MinInt = -1 << (intSize - 1) // MinInt32 or MinInt64 depending on intSize. | |||
MaxInt8 = 1<<7 - 1 // 127 | |||
MinInt8 = -1 << 7 // -128 | |||
MaxInt16 = 1<<15 - 1 // 32767 | |||
MinInt16 = -1 << 15 // -32768 | |||
MaxInt32 = 1<<31 - 1 // 2147483647 | |||
MinInt32 = -1 << 31 // -2147483648 | |||
MaxInt64 = 1<<63 - 1 // 9223372036854775807 | |||
MinInt64 = -1 << 63 // -9223372036854775808 | |||
MaxUint = 1<<intSize - 1 // MaxUint32 or MaxUint64 depending on intSize. | |||
MaxUint8 = 1<<8 - 1 // 255 | |||
MaxUint16 = 1<<16 - 1 // 65535 | |||
MaxUint32 = 1<<32 - 1 // 4294967295 | |||
MaxUint64 = 1<<64 - 1 // 18446744073709551615 | |||
) | |||
</syntaxhighlight> | |||
<syntaxhighlight lang='go'> | |||
import math | |||
... | |||
math.MaxInt | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 52: | Line 85: | ||
bytes := []byte("test") | bytes := []byte("test") | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang='go'> | |||
rawJSON := []byte(`{ | |||
"something": "something else", | |||
"colors": [ | |||
"red", | |||
"blue", | |||
"green" | |||
] | |||
}`) | |||
</syntaxhighlight> | |||
The following expression converts a slice of bytes to string: | The following expression converts a slice of bytes to string: | ||
Line 61: | Line 103: | ||
Also see: | Also see: | ||
{{Internal|Go_Concepts_-_The_Type_System#Conversion_Between_Types|Conversion between Types}} | |||
{{Internal|Go_Strings#String_Conversions|String Conversions}} | |||
=Integers as characters= | =Integers as characters= |
Latest revision as of 02:14, 12 June 2024
External
Internal
Overview
Integers are designated by the following pre-declared type identifiers.
In most cases, we simply declare an int
(signed integer) or uint
(unsigned integer) and leave it to the compiler to allocate the right type of integer, depending on the underlying architecture. If we want to get specific, we can use:
- Unsigned integers represented on the specified number of bits:
uint8
(byte
),uint16
,uint32
(rune
, also see strings),uint64
. - Signed integers, represented on the specified number of bits:
int8
,int16
,int32
,int64
. Internally they are stored in 2's complement representation. - Machine-dependent integers:
uint
,int
anduintptr
.int
, for example, can be 4 bytes or 8 bytes long, depending on the underlying architecture.
When a regular integer is needed in the program, int
should be the default.
The uninitialized value is 0
.
Integer Variable Declaration
var i int // string type declaration without initialization
i = 1 // initialization after declaration
var i2 int = 2 // variable initialization in declaration
var i3 = 3 // variable initialization with type inference
i4 := 4 // short variable declaration
Max and Min Values
Available as costs in the math
package:
const (
MaxInt = 1<<(intSize-1) - 1 // MaxInt32 or MaxInt64 depending on intSize.
MinInt = -1 << (intSize - 1) // MinInt32 or MinInt64 depending on intSize.
MaxInt8 = 1<<7 - 1 // 127
MinInt8 = -1 << 7 // -128
MaxInt16 = 1<<15 - 1 // 32767
MinInt16 = -1 << 15 // -32768
MaxInt32 = 1<<31 - 1 // 2147483647
MinInt32 = -1 << 31 // -2147483648
MaxInt64 = 1<<63 - 1 // 9223372036854775807
MinInt64 = -1 << 63 // -9223372036854775808
MaxUint = 1<<intSize - 1 // MaxUint32 or MaxUint64 depending on intSize.
MaxUint8 = 1<<8 - 1 // 255
MaxUint16 = 1<<16 - 1 // 65535
MaxUint32 = 1<<32 - 1 // 4294967295
MaxUint64 = 1<<64 - 1 // 18446744073709551615
)
import math
...
math.MaxInt
Integer Literals
Operators
Binary Operators
Arithmetic: +
, -
, *
, /
, %
, <<
, >>
Comparison: ==
, !=
, >
, <
, >=
, <=
Boolean: &&
, ||
byte
byte
is unsigned int represented on a byte (uint8
).
Indexing operator [] applied to strings return bytes.
Conversion between bytes and strings
A single byte can be converted to string as follows:
var b byte = 65 // decimal ASCII for "A"
str := string(b) // str is "A"
The following expression converts a string to a slice of bytes:
bytes := []byte("test")
rawJSON := []byte(`{
"something": "something else",
"colors": [
"red",
"blue",
"green"
]
}`)
The following expression converts a slice of bytes to string:
str := string(bytes)
Also see:
Integers as characters
i := 'A'
j := i + 1
fmt.Printf("%c %d\n", j, j)
Also see:
Integers to Strings
i := 0
string(48 + i)