Integer (Ganzzahlen)
Integer (Ganzzahlen) lassen sich grob in zwei Kategorien einteilen: Unsigned Integer (vorzeichenlose Ganzzahlen) und Signed Integer (vorzeichenbehaftete Ganzzahlen). Signed Integer (vorzeichenbehaftete Ganzzahlen) werden am häufigsten verwendet.
Unsigned (vorzeichenlos) bedeutet, dass sie nur nicht-negative Zahlen (0 und positive Zahlen) darstellen können, während Signed Integer (vorzeichenbehaftete Zahlen) sowohl negative als auch nicht-negative Zahlen darstellen können.
Unsigned Integer (vorzeichenlose Ganzzahlen) lassen sich in vier Größen unterteilen: 8 Bit, 16 Bit, 32 Bit und 64 Bit, dargestellt durch uint8
, uint16
, uint32
bzw. uint64
. Die entsprechenden Signed Integer (vorzeichenbehafteten Ganzzahlen) sind int8
, int16
, int32
und int64
. Die folgende Tabelle zeigt die verschiedenen Bereiche, die von jedem Typ dargestellt werden:
Typ |
Beschreibung |
Bereich |
uint8 |
8-Bit Unsigned Integer (vorzeichenlose 8-Bit-Ganzzahl) |
0 bis 255 |
int8 |
8-Bit Signed Integer (vorzeichenbehaftete 8-Bit-Ganzzahl) |
-128 bis 127 |
uint16 |
16-Bit Unsigned Integer (vorzeichenlose 16-Bit-Ganzzahl) |
0 bis 65535 |
int16 |
16-Bit Signed Integer (vorzeichenbehaftete 16-Bit-Ganzzahl) |
-32768 bis 32767 |
uint32 |
32-Bit Unsigned Integer (vorzeichenlose 32-Bit-Ganzzahl) |
0 bis 4294967295 |
int32 |
32-Bit Signed Integer (vorzeichenbehaftete 32-Bit-Ganzzahl) |
-2147483648 bis 2147483647 |
uint64 |
64-Bit Unsigned Integer (vorzeichenlose 64-Bit-Ganzzahl) |
0 bis 18446744073709551615 |
int64 |
64-Bit Signed Integer (vorzeichenbehaftete 64-Bit-Ganzzahl) |
-9223372036854775808 bis 9223372036854775807 |
Nehmen wir uint8
und int8
als Beispiele. Sie sind beide 8-Bit-Integer (8-Bit-Ganzzahlen) und können 256 Werte darstellen. Im Unsigned Integer-Typ (vorzeichenlosen Ganzzahltyp) uint8
reicht der darstellbare Bereich von 0 bis 255, während im Signed Integer-Typ (vorzeichenbehafteten Ganzzahltyp) int8
der darstellbare Bereich von -128 bis 127 reicht.
Zusätzlich zu den oben genannten 8 Typen gibt es drei weitere spezielle Integer-Typen (Ganzzahltypen), uint
, int
und uintptr
, wobei uint
und int
auf verschiedenen Plattformen unterschiedliche Bereiche darstellen können und uintptr
zum Speichern von Pointer-Adressen (Zeigeradressen) verwendet wird.
Typ |
Bereich |
uint |
uint32 auf 32-Bit-Systemen, uint64 auf 64-Bit-Systemen |
int |
int32 auf 32-Bit-Systemen, int64 auf 64-Bit-Systemen |
uintptr |
Unsigned Integer-Typ (vorzeichenloser Ganzzahltyp) zum Speichern von Pointer-Adressen (Zeigeradressen), meist verwendet in Low-Level-Programmierung (Low-Level Programming) wie unsafe Operations (unsichere Operationen) |
Erstellen wir nun eine Datei namens integer.go
, um die Verwendung von Integer (Ganzzahlen) zu demonstrieren:
cd ~/project
touch integer.go
package main
import (
"fmt"
"unsafe"
)
func main() {
// View the type of int in the current environment
// Den Typ von int in der aktuellen Umgebung anzeigen
// Declare a as the type int
// Deklariere a als Typ int
var a int
// Use unsafe.Sizeof() to output the memory size occupied by the type
// Verwende unsafe.Sizeof(), um die vom Typ belegte Speichergröße auszugeben
fmt.Printf("The type int in the current environment is %d bits\n", unsafe.Sizeof(a)*8)
var b int8 = 125
// Use the %d placeholder in fmt.Printf to output the value of the integer
// Verwende den Platzhalter %d in fmt.Printf, um den Wert des Integers auszugeben
// Use the %T placeholder in fmt.Printf to output the type of the variable
// Verwende den Platzhalter %T in fmt.Printf, um den Typ der Variablen auszugeben
fmt.Printf("The value of b is %d, and the type is %T\n", b, b)
// Integer operations
// Integer-Operationen
// Declare integers c and d, and calculate their sum
// Deklariere die Integer c und d und berechne ihre Summe
c, d := 2, 3
fmt.Printf("c + d = %d\n", c+d)
// 10 - 5
fmt.Printf("10 - 5 = %d\n", 10-5)
// 8 * 10
fmt.Printf("8 * 10 = %d\n", 8*10)
// Example of uintptr usage - storing an address
// Beispiel für die Verwendung von uintptr - Speichern einer Adresse
var ptr uintptr
x := 42
// Convert the pointer to x to uintptr
// Konvertiere den Zeiger auf x in uintptr
ptr = uintptr(unsafe.Pointer(&x))
fmt.Printf("The address of x stored in ptr is: %v\n", ptr)
}
Nach der Ausführung des Programms erhalten wir die folgende Ausgabe:
go run integer.go
The type int in the current environment is 64 bits
The value of b is 125, and the type is int8
c + d = 5
10 - 5 = 5
8 * 10 = 80
The address of x stored in ptr is: 824634818784
Erläuterung der Ausgabe:
The type int in the current environment is 64 bits
: Diese Zeile zeigt, dass der Typ int
auf dem System, auf dem der Code ausgeführt wird, 64 Bit (oder 8 Byte) groß ist, was darauf hindeutet, dass es sich um einen int64
handelt. unsafe.Sizeof(a)
gibt die Größe der Variablen a
in Byte zurück, und die Multiplikation mit 8 wandelt sie in Bit um. Dies bedeutet, dass der Typ int
größere Integer-Werte (Ganzzahlwerte) aufnehmen kann.
The value of b is 125, and the type is int8
: Hier haben wir eine Variable b
vom Typ int8
deklariert und ihr den Wert 125 zugewiesen. Die Ausgabe bestätigt dies, indem sie sowohl den Wert als auch den Datentyp anzeigt.
c + d = 5
, 10 - 5 = 5
, 8 * 10 = 80
: Diese Zeilen zeigen grundlegende arithmetische Integer-Operationen (Ganzzahloperationen): Addition, Subtraktion und Multiplikation. Die Ausgabe bestätigt die korrekten Ergebnisse dieser Berechnungen.
The address of x stored in ptr is: 824634818784
: Dies demonstriert, wie uintptr
zum Speichern einer Speicheradresse verwendet werden kann. Wir konvertieren einen Zeiger auf die Integer-Variable (Ganzzahlvariable) x
in einen uintptr
-Typ. Der tatsächliche Adresswert variiert bei jeder Ausführung des Programms. Dies ist ein fortgeschrittener Anwendungsfall, der typischerweise in unsafe Operations (unsicheren Operationen) und Systemprogrammierung vorkommt.
In dieser Datei kann die Funktion unsafe.Sizeof()
verwendet werden, um die Anzahl der Bytes zu erhalten, die vom aktuellen Variablentyp belegt werden. 1 Byte (Byte) entspricht 8 Bit, sodass unsafe.Sizeof()*8
die Anzahl der vom Typ belegten Bit ermitteln kann. Aus der Ausgabe können wir ersehen, dass die Online-Umgebung 64 Bit beträgt. Der tatsächliche Typ von int
in der Online-Umgebung ist int64
.
Wir können den folgenden Befehl im Terminal verwenden, um die aktuelle Systemarchitektur zu ermitteln:
dpkg --print-architecture
amd64