В дополнение к большому ответу daslinkenlight, вот программа для игрушек, которая печатает двоичное представление интегрального типа.
Пример C++ код:
#include <climits>
#include <iostream>
#include <iomanip>
#include <string>
#include <type_traits>
template<typename T,
typename = typename std::enable_if<std::is_integral<T>::value, T>::type>
std::string get_raw_bytes(T t) {
const auto limit = sizeof(T) * CHAR_BIT;
std::string bits(limit, '0');
for(auto i = 0; i < limit; i++) {
bits[limit - i - 1] = ((t >> i) & 1) ? '1' : '0';
}
return bits;
}
int main() {
std::cout << "Integers:\n";
for (int i = -5 ; i < 6 ; i++) {
std::cout << std::setw(4) << i << " " << get_raw_bytes(i) << '\n';
}
std::cout << "Character:\n";
std::cout << std::setw(4) << (char)104 << " " << get_raw_bytes<char>(104) << '\n';
}
Пример C Код:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define INT_BITS (sizeof(int) * CHAR_BIT)
void get_int_raw_bytes(int in, char* out) {
for (unsigned long i = 0 ; i < INT_BITS ; i++) {
out[INT_BITS - i - 1] = ((in >> i) & 1) ? '1' : '0';
}
}
void get_char_raw_bytes(char in, char* out) {
for (unsigned long i = 0 ; i < CHAR_BIT ; i++) {
out[CHAR_BIT - i - 1] = ((in >> i) & 1) ? '1' : '0';
}
}
int main() {
puts("Integers:");
for (int i = -5 ; i < 6 ; i++) {
char buffer[INT_BITS + 1];
buffer[INT_BITS] = '\0';
get_int_raw_bytes(i, buffer);
printf("%4.d %s\n", i, buffer);
}
puts("Character:");
char buffer[CHAR_BIT + 1];
buffer[CHAR_BIT] = '\0';
get_char_raw_bytes(104, buffer);
printf("%4.c %s\n", 104, buffer);
}
С Пример вывода:
Integers:
-5 11111111111111111111111111111011
-4 11111111111111111111111111111100
-3 11111111111111111111111111111101
-2 11111111111111111111111111111110
-1 11111111111111111111111111111111
0 00000000000000000000000000000000
1 00000000000000000000000000000001
2 00000000000000000000000000000010
3 00000000000000000000000000000011
4 00000000000000000000000000000100
5 00000000000000000000000000000101
Character:
h 01101000
Зависит от процессора, даже если он знаком или без знака: см big- endian и little-endian. – nicomp
Есть больше факторов. Какая endianess используется в целевой архитектуре? –
«Endianness» системы используется для определения того, является ли бит верхнего или нижнего порядка – smac89