Go/int16
表示
< Go
int16はGoにおいて事前宣言された符号付き16ビット整数型です。サイズは明確に定義されており、-32,768から32,767までの値を表現できます。
基本的な特徴
[編集]- 値の範囲: -32,768 から 32,767 (2^15-1)
- サイズ: 常に16ビット (2バイト)
- 符号: あり (signed)
- ゼロ値: 0
他のキーワードとの組み合わせ
[編集]型変換
[編集]var a int16 = 10000 var b int = int(a) // int16からintへの明示的変換 var c float32 = float32(a) // int16からfloat32への変換 var d int16 = int16(30000) // 他の数値型からint16への変換 var e int8 = int8(a) // int16からint8への変換(注意:オーバーフローの可能性あり)
定数との組み合わせ
[編集]const maxInt16 int16 = 32767 const minInt16 int16 = -32768
型アサーション
[編集]var i interface{} = int16(12345) if val, ok := i.(int16); ok { fmt.Println("値はint16型で:", val) }
型スイッチ
[編集]func checkType(i interface{}) { switch v := i.(type) { case int16: fmt.Println("これはint16型:", v) case int8: fmt.Println("これはint8型:", v) default: fmt.Println("これはint16型でもint8型でもない") } }
ビット演算
[編集]var a int16 = 0x0F0F var b int16 = 0xF0F0 fmt.Printf("AND: %04X\n", a & b) // 0x0000 fmt.Printf("OR: %04X\n", a | b) // 0xFFFF fmt.Printf("XOR: %04X\n", a ^ b) // 0xFFFF fmt.Printf("左シフト: %04X\n", a << 4) // 0xF0F0 fmt.Printf("右シフト: %04X\n", a >> 4) // 0x00F0
ユースケース
[編集]- オーディオ処理
- 16ビットPCMオーディオデータの処理
- WAVファイルの読み書き
- グラフィック処理
- 16ビット色深度の画像処理
- ピクセル値の操作
- 組み込みシステム
- 16ビットマイクロコントローラとの通信
- レジスタ値やメモリアドレスの表現
- ハードウェアインターフェース
- センサーデータの読み取り(例:16ビットADC)
- 電子機器との通信プロトコル
- メモリ効率化
- ネットワークプロトコル
- TCP/IPヘッダのポート番号(16ビット値)
- バイナリプロトコルのデータフィールド
- ファイルフォーマット解析
- 16ビット単位で構造化されたバイナリファイル
- フォーマット互換性のための正確なビット表現
- 高精度測定値の格納
- センサーデータや測定値で-32,768〜32,767の範囲に収まるもの
- 固定小数点演算
- 限られたリソースでの小数演算の実装
- 配列での使用
var readings [1000]int16 // 2KBのメモリを使用
- スライスでの使用
audioData := make([]int16, 44100*2) // 2チャンネル、1秒分のオーディオデータ
- バイナリデータの変換
// バイト列からint16への変換(リトルエンディアン) func bytesToInt16(b []byte) int16 { return int16(binary.LittleEndian.Uint16(b)) }
注意点
[編集]- エンディアン: マルチバイト値としての
int16はエンディアン(バイト順)の影響を受けますbuf := make([]byte, 2) binary.LittleEndian.PutUint16(buf, uint16(12345)) // リトルエンディアン binary.BigEndian.PutUint16(buf, uint16(12345)) // ビッグエンディアン
- オーバーフロー:
int16は-32,768〜32,767の範囲を超えるとオーバーフローが発生しますvar a int16 = 32767 a++ // オーバーフローで -32768 になる
- 型互換性: 他の整数型との自動的な互換性がないため、明示的な型変換が必要です
- アライメント: 一部のアーキテクチャでは、16ビット値のメモリアライメントが性能に影響することがあります
Goでint16型を選択する際は、必要な値の範囲とメモリ効率のバランスを考慮し、使用するハードウェアやプロトコルとの互換性を確認することが重要です。