stdc_leading_zeros
From cppreference.net
|
헤더에 정의됨
<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 )
// 노출된 인터페이스:
|
(6) | (C23부터) |
1-5)
가장 중요한 비트부터 시작하여
0
비트가 연속으로 나타나는 개수를 반환합니다.
6)
타입-제네릭 함수(
generic_value_type
인자로 표시됨)는 입력 값의 타입이 다음 중 하나인 경우 해당 타입에 적합한 값을 반환합니다:
- 표준 부호 없는 정수 타입( bool 제외);
- 확장 부호 없는 정수 타입;
- 또는 표준/확장 정수 타입과 너비가 일치하는 비트-정밀 부호 없는 정수 타입( bool 제외).
generic_return_type
은 계산된 결과를 표현할 수 있는 적절한 큰 부호 없는 정수 타입이어야 합니다.
목차 |
매개변수
| 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
참고 항목
|
(C23)
|
최상위 비트부터 시작하여
0
비트의 첫 번째 위치를 찾음
(타입-제네릭 함수 매크로) |
|
(C23)
|
부호 없는 정수에서
0
비트의 개수를 셈
(타입-제네릭 함수 매크로) |
|
(C23)
|
최상위 비트부터 시작하여 연속된
1
비트의 개수를 셈
(타입-제네릭 함수 매크로) |
|
C++ documentation
for
countl_zero
|
|