Skip to content

Instantly share code, notes, and snippets.

@niXman
Created December 8, 2017 20:43
Show Gist options
  • Save niXman/a1c2f4922030c49927598777f0a4b0d2 to your computer and use it in GitHub Desktop.
Save niXman/a1c2f4922030c49927598777f0a4b0d2 to your computer and use it in GitHub Desktop.
num of bytes
#include <iostream>
#include <cstdint>
std::uint8_t num_of_bytes(std::uint64_t v) {
std::uint8_t c = 0;
c |= (!!(v & 0xFF00ull));
c |= (!!(v & 0xFF0000ull)) << 1;
c |= (!!(v & 0xFF000000ull)) << 2;
c |= (!!(v & 0xFF00000000ull)) << 3;
c |= (!!(v & 0xFF0000000000ull)) << 4;
c |= (!!(v & 0xFF000000000000ull)) << 5;
c |= (!!(v & 0xFF00000000000000ull)) << 6;
static const std::uint8_t sizes[] = {
1
,2
,3,3
,4,4,4,4
,5,5,5,5,5,5,5,5
,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
};
return sizes[c];
}
int main() {
std::cout << "1=" << static_cast<std::size_t>(num_of_bytes(0ull)) << std::endl;
std::cout << "1=" << static_cast<std::size_t>(num_of_bytes(1ull<<7)) << std::endl;
std::cout << "2=" << static_cast<std::size_t>(num_of_bytes(1ull<<8)) << std::endl;
std::cout << "2=" << static_cast<std::size_t>(num_of_bytes(1ull<<15)) << std::endl;
std::cout << "3=" << static_cast<std::size_t>(num_of_bytes(1ull<<16)) << std::endl;
std::cout << "3=" << static_cast<std::size_t>(num_of_bytes(1ull<<17)) << std::endl;
std::cout << "4=" << static_cast<std::size_t>(num_of_bytes(1ull<<31)) << std::endl;
std::cout << "5=" << static_cast<std::size_t>(num_of_bytes(1ull<<32)) << std::endl;
std::cout << "6=" << static_cast<std::size_t>(num_of_bytes(1ull<<47)) << std::endl;
std::cout << "7=" << static_cast<std::size_t>(num_of_bytes(1ull<<48)) << std::endl;
std::cout << "8=" << static_cast<std::size_t>(num_of_bytes(1ull<<56)) << std::endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment