Двоичные представления числовых значений

Следующая шпаргалка показывает наиболее распространенные представления целых чисел, беззнаковых целых чисел и значений с плавающей точкой, используемые большинством аппаратных платформ и языков программирования.
Посмотрите этот инструмент для визуализации и экспериментов с представлениями битов 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++.

Оцените статью
devanswers.ru
Добавить комментарий