stdc_leading_zeros
來自 cppreference.com
定義於標頭檔案 <stdbit.h> |
||
unsigned int stdc_leading_zeros_uc( unsigned char value ) [[unsequenced]]; |
(1) | (自 C23 起) |
unsigned int stdc_leading_zeros_us( unsigned short value ) [[unsequenced]]; |
(2) | (自 C23 起) |
unsigned int stdc_leading_zeros_ui( unsigned int value ) [[unsequenced]]; |
(3) | (自 C23 起) |
unsigned int stdc_leading_zeros_ul( unsigned long int value ) [[unsequenced]]; |
(4) | (自 C23 起) |
unsigned int stdc_leading_zeros_ull( unsigned long long int value ) [[unsequenced]]; |
(5) | (自 C23 起) |
#define stdc_leading_zeros( value ) // exposed interface |
(6) | (自 C23 起) |
1-5) 返回 value 中從最高有效位開始連續的 0 位數。
6) 型別泛型函式(由其
generic_value_type
引數標記)根據輸入值的型別返回適當的值,只要它是- 標準無符號整數型別,不包括 bool;
- 擴充套件無符號整數型別;
- 或者,位精度無符號整數型別,其寬度與標準或擴充套件整數型別匹配,不包括 bool。
generic_return_type
應為能夠表示計算結果的合適的大型無符號整數型別。目錄 |
[編輯] 引數
value | - | 無符號整數型別的值 |
[編輯] 返回值
從最高有效位開始,value 中連續的 0 位數。
[編輯] 示例
執行此程式碼
#include <limits.h> #include <stdbit.h> #include <stdint.h> #include <stdio.h> #define bits_num(value) (sizeof(value) * CHAR_BIT) #define bin_impl(T, suffix) \ const char* bin_##suffix(T x) \ { \ static char buf[bits_num(x) * CHAR_BIT + 1]; \ for (T i = 0, mask = ((T)1 << (bits_num(x) - 1)); mask; mask >>= 1) \ buf[i++] = x & mask ? '1' : '0'; \ buf[bits_num(x)] = '\0'; \ return buf; \ } bin_impl(uint8_t, u8) bin_impl(uint16_t, u16) bin_impl(uint32_t, u32) bin_impl(uint64_t, u64) #define bin(x) _Generic((x), \ uint8_t: bin_u8, uint16_t: bin_u16, uint32_t: bin_u32, default: bin_u64)(x) int main() { puts("uint8_t:"); for (uint8_t x = 0b11000000; ; x >>= 1) { printf("x = [%s], leading zeros: %d\n", bin(x), stdc_leading_zeros(x)); if (!x) break; } puts("uint16_t:"); for (uint16_t x = 0b11000000; ; x >>= 1) { printf("x = [%s], leading zeros: %d\n", bin(x), stdc_leading_zeros(x)); if (!x) break; } }
輸出
uint8_t: x = [11000000], leading zeros: 0 x = [01100000], leading zeros: 1 x = [00110000], leading zeros: 2 x = [00011000], leading zeros: 3 x = [00001100], leading zeros: 4 x = [00000110], leading zeros: 5 x = [00000011], leading zeros: 6 x = [00000001], leading zeros: 7 x = [00000000], leading zeros: 8 uint16_t: x = [0000000011000000], leading zeros: 8 x = [0000000001100000], leading zeros: 9 x = [0000000000110000], leading zeros: 10 x = [0000000000011000], leading zeros: 11 x = [0000000000001100], leading zeros: 12 x = [0000000000000110], leading zeros: 13 x = [0000000000000011], leading zeros: 14 x = [0000000000000001], leading zeros: 15 x = [0000000000000000], leading zeros: 16
[編輯] 參閱
查詢從最高有效位開始的第一個 0 位的位置 (型別泛型函式宏) | |
(C23) |
計算無符號整數中 0 位的數量 (型別泛型函式宏) |
(C23) |
計算從最高有效位開始的連續 1 位數 (型別泛型函式宏) |
C++ 文件 for countl_zero
|