
- C 標準庫
- C 標準庫
- C++ 標準庫
- C++ 庫 - 首頁
- C++ 庫 - <fstream>
- C++ 庫 - <iomanip>
- C++ 庫 - <ios>
- C++ 庫 - <iosfwd>
- C++ 庫 - <iostream>
- C++ 庫 - <istream>
- C++ 庫 - <ostream>
- C++ 庫 - <sstream>
- C++ 庫 - <streambuf>
- C++ 庫 - <atomic>
- C++ 庫 - <complex>
- C++ 庫 - <exception>
- C++ 庫 - <functional>
- C++ 庫 - <limits>
- C++ 庫 - <locale>
- C++ 庫 - <memory>
- C++ 庫 - <new>
- C++ 庫 - <numeric>
- C++ 庫 - <regex>
- C++ 庫 - <stdexcept>
- C++ 庫 - <string>
- C++ 庫 - <thread>
- C++ 庫 - <tuple>
- C++ 庫 - <typeinfo>
- C++ 庫 - <utility>
- C++ 庫 - <valarray>
- C++ STL 庫
- C++ 庫 - <array>
- C++ 庫 - <bitset>
- C++ 庫 - <deque>
- C++ 庫 - <forward_list>
- C++ 庫 - <list>
- C++ 庫 - <map>
- C++ 庫 - <multimap>
- C++ 庫 - <queue>
- C++ 庫 - <priority_queue>
- C++ 庫 - <set>
- C++ 庫 - <stack>
- C++ 庫 - <unordered_map>
- C++ 庫 - <unordered_set>
- C++ 庫 - <vector>
- C++ 庫 - <algorithm>
- C++ 庫 - <iterator>
- C++ 高階庫
- C++ 庫 - <any>
- C++ 庫 - <barrier>
- C++ 庫 - <bit>
- C++ 庫 - <chrono>
- C++ 庫 - <cinttypes>
- C++ 庫 - <clocale>
- C++ 庫 - <condition_variable>
- C++ 庫 - <coroutine>
- C++ 庫 - <cstdlib>
- C++ 庫 - <cstring>
- C++ 庫 - <cuchar>
- C++ 庫 - <charconv>
- C++ 庫 - <cfenv>
- C++ 庫 - <cmath>
- C++ 庫 - <ccomplex>
- C++ 庫 - <expected>
- C++ 庫 - <format>
- C++ 庫 - <future>
- C++ 庫 - <flat_set>
- C++ 庫 - <flat_map>
- C++ 庫 - <filesystem>
- C++ 庫 - <generator>
- C++ 庫 - <initializer_list>
- C++ 庫 - <latch>
- C++ 庫 - <memory_resource>
- C++ 庫 - <mutex>
- C++ 庫 - <mdspan>
- C++ 庫 - <optional>
- C++ 庫 - <print>
- C++ 庫 - <ratio>
- C++ 庫 - <scoped_allocator>
- C++ 庫 - <semaphore>
- C++ 庫 - <source_location>
- C++ 庫 - <span>
- C++ 庫 - <spanstream>
- C++ 庫 - <stacktrace>
- C++ 庫 - <stop_token>
- C++ 庫 - <syncstream>
- C++ 庫 - <system_error>
- C++ 庫 - <string_view>
- C++ 庫 - <stdatomic>
- C++ 庫 - <variant>
- C++ STL 庫速查表
- C++ STL - 速查表
- C++ 程式設計資源
- C++ 程式設計教程
- C++ 有用資源
- C++ 討論
C++ 庫 - <bit>
C++ 中的<bit> 標頭檔案提供了多個用於位操作和按位運算的函式,這些函式對於底層程式設計任務至關重要。包括用於計數位、查詢最高/最低設定位等的函式。此標頭檔案是數值庫的一部分。
包含 <bit> 標頭檔案
要在 C++ 程式中包含 <bit> 標頭檔案,可以使用以下語法。
#include <bit>
<bit> 標頭檔案的函式
以下是 <bit> 標頭檔案中所有函式的列表。
型別轉換和位元組操作
在 C++ 中,型別轉換和位元組操作函式處理在位元組級別的資料型別表示。資料的二進位制表示對於資料序列化和效能最佳化至關重要。
序號 | 函式和描述 |
---|---|
1 | bit_cast
此函式將一種型別的物件表示重新解釋為另一種型別的物件表示。 |
2 | byteswap
此函式反轉給定整數值中的位元組。 |
手動實現 byteswap
在下面的示例中,我們將手動實現 byteswap。
#include <bit> #include <iostream> uint16_t manual_byteswap(uint16_t value) { return (value >> 8) | (value << 8); } int main() { uint16_t value = 0x1234; uint16_t swapped = manual_byteswap(value); std::cout << std::hex << swapped; return 0; }
輸出
如果我們執行上面的程式碼,它將生成以下輸出:
3412
二次冪運算
透過使用這些運算,我們可以檢查一個數是否為 2 的冪,或者找到最接近的 2 的冪,可以最佳化記憶體分配或按位運算。
序號 | 函式和描述 |
---|---|
1 | has_single_bit
此函式檢查一個數是否是 2 的整數冪。 |
2 | bit_ceil
此函式查詢大於或等於給定值的最小 2 的整數冪。 |
3 | bit_floor
此函式查詢小於或等於給定值的最大的 2 的整數冪。 |
4 | bit_width
此函式查詢表示給定值所需的最少位數。 |
查詢最小冪
在下面的示例中,我們將使用 bit_ceil 查詢 2 的最小冪。
#include <bit> #include <iostream> int main() { uint32_t value = 10; uint32_t ceil_value = std::bit_ceil(value); std::cout << ceil_value; return 0; }
輸出
如果我們執行上面的程式碼,它將生成以下輸出:
16
按位旋轉
按位旋轉涉及將數字的位向左或向右移動。這些旋轉通常用於加密演算法、雜湊函式和底層最佳化。
序號 | 函式和描述 |
---|---|
1 | rotl
此函式計算按位左旋轉的結果。 |
2 | rotr
此函式計算按位右旋轉的結果。 |
旋轉位
在下面的示例中,我們將使用 rotl 將數字的位向左旋轉。
#include <bitset> #include <bit> #include <iostream> uint8_t manual_rotl(uint8_t value, int shift) { return (value << shift) | (value >> (8 - shift)); } int main() { uint8_t value = 0b10110001; uint8_t rotated = manual_rotl(value, 2); std::cout << std::bitset<8>(rotated); return 0; }
輸出
如果我們執行上面的程式碼,它將生成以下輸出:
11000110
位計數
位計數函式用於計算連續位(0 或 1)或設定為 1 的總位數。這些操作主要用於底層程式設計,其中有效地操作單個位可以顯著最佳化效能。
序號 | 函式和描述 |
---|---|
1 | countl_zero
此函式計算從最高有效位開始的連續 0 位數。 |
2 | countl_one
此函式計算從最高有效位開始的連續 1 位數。 |
3 | countr_zero
此函式計算從最低有效位開始的連續 0 位數。 |
4 | countr_one
此函式計算從最低有效位開始的連續 1 位數。 |
5 | popcount
此函式計算無符號整數中 1 的位數。 |
手動計數位
在下面的示例中,我們將使用 popcount 來計算數字中設定為 1 的位數。
#include <bit> #include <iostream> uint32_t manual_popcount(uint32_t value) { uint32_t count = 0; while (value) { count += value & 1; value >>= 1; } return count; } int main() { uint32_t value = 0b10110001; uint32_t count = manual_popcount(value); std::cout << "Number of 1s: " << count; return 0; }
輸出
如果我們執行上面的程式碼,它將生成以下輸出:
Number of 1s: 4