Следующая шпаргалка показывает наиболее распространенные представления целых чисел, беззнаковых целых чисел и значений с плавающей точкой, используемые большинством аппаратных платформ и языков программирования.Посмотрите этот инструмент для визуализации и экспериментов с представлениями битов IEEE с плавающей точкой.
Содержание
Ситуация в C++
std::numeric_limits<Type>
предоставляет числовые свойства для всех фундаментальных типов C++ (int
, float
, double
, unsigned int
и т.д.). Приведенная ниже шпаргалка показывает, как возвращаемое значение std::numeric_limits<Type>
::member_function()
связано с двоичным представлением числовых значений для Type
.
Использование numeric_limits
#include <limits>
// smallest negative value:
std::cout << std::numeric_limits<double>::lowest();
// float/double: smallest value > 0
// integers: smallest value
std::cout << std::numeric_limits<double>::min();
// largest positive value:
std::cout << std::numeric_limits<double>::max();
// smallest difference btw. 1 and next value:
std::cout << std::numeric_limits<double>::epsilon();
Побитовые операции в C++
Некоторые примеры манипуляций с битами беззнаковых целых чисел
#include <cstdint>
// value | memory bits
std::uint8_t a = 6; // | 0000 0110
std::uint8_t b = 0b00001011; // | 0000 1011
std::uint8_t c1 = (a & b); // 2 | 0000 0010
std::uint8_t c2 = (a | b); // 15 | 0000 1111
std::uint8_t c3 = (a ^ b); // 13 | 0000 1101
std::uint8_t c4 = ~a; // 249 | 1111 1001
std::uint8_t c5 = ~b; // 244 | 1111 0100
// test if int is even/odd: // result:
bool a_odd = a & 1; // 0 => false
bool a_even = !(a & 1); // 1 => true
#include <cstdint>
// | memory bits
std::uint8_t a = 1; // | 0000 0001
a <<= 6; // 64 // | 0100 0000
a >>= 4; // 4 // | 0000 0100
std::uint8_t b1 = (1 << 1); // 2 | 0000 0010
std::uint8_t b2 = (1 << 2); // 4 | 0000 0100
std::uint8_t b3 = (1 << 4); // 16 | 0001 0000
Ширина типов / размеры памяти фундаментальных типов
Больше интересных шпаргалок смотрите в моей коллекции шпаргалок по C++.