귀하의 질문에 대한 완전한 대답이 아니지만 다음 기능이 도움이되기를 바랍니다.
template <typename I>
bool scan_n_zeros (I iVal, std::size_t num)
{
while (--num)
iVal |= ((iVal << 1) | I{1});
return iVal != I(-1);
}
(I 올바르게 작성한 경우) 그것은 반환 true
경우 (없는 경우) iVal
적어도 num
연속 제로 비트가 있습니다. T
이 작업 폼 UINT16 그래서 난 그룹 UINT16에 2 바이트 다음 창을 한 바이트를 밀어 다음에 바이트에서의 트란 지션을 설명 할 수있는 것 uint8_t
#include <iostream>
template <typename I>
bool scan_n_zeros (I iVal, std::size_t num)
{
while (--num)
iVal |= ((iVal << 1) | I{1});
return iVal != I(-1);
}
int main()
{
uint8_t u0 { 0b00100100 };
uint8_t u1 { 0b00001111 };
uint8_t u2 { 0b10000111 };
uint8_t u3 { 0b11000011 };
uint8_t u4 { 0b11100001 };
uint8_t u5 { 0b11110000 };
std::cout << scan_n_zeros(u0, 2U) << std::endl; // print 1
std::cout << scan_n_zeros(u0, 3U) << std::endl; // print 0
std::cout << scan_n_zeros(u1, 4U) << std::endl; // print 1
std::cout << scan_n_zeros(u1, 5U) << std::endl; // print 0
std::cout << scan_n_zeros(u2, 4U) << std::endl; // print 1
std::cout << scan_n_zeros(u2, 5U) << std::endl; // print 0
std::cout << scan_n_zeros(u3, 4U) << std::endl; // print 1
std::cout << scan_n_zeros(u3, 5U) << std::endl; // print 0
std::cout << scan_n_zeros(u4, 4U) << std::endl; // print 1
std::cout << scan_n_zeros(u4, 5U) << std::endl; // print 0
std::cout << scan_n_zeros(u5, 4U) << std::endl; // print 1
std::cout << scan_n_zeros(u5, 5U) << std::endl; // print 0
}
때
다음은 전체 작업 예입니다 처음부터 끝까지? –
@HamzaYerlikaya - 모든 정수 부호없는 유형을 사용하기 때문에 템플리트 함수를 정확하게 개발했습니다. – max66