Binary
Overview
A binary digit or bit is a 0 or 1 character. A bit string is then a contiguous sequence of bits. It's weight is a reference to the number of 1s in the bit string. Compare the below operation to the method for converting from one numerical base to another (e.g. hexadecimal).
unsigned int bit_weight(int64_t n) {
unsigned int count = 0;
while (n) {
count += (n % 2 == 0) ? 0 : 1;
n /= 2;
}
return count;
}
Endianness
Platforms with multi-byte objects must establish the object's address and byte ordering. Objects are typically addressed by the smallest address of the bytes used. Bytes are ordered either in big-endian or little-endian. In big-endian, the most significant byte is listed first. In little-endian, the least significant byte is ordered first.
#include <stdint.h>
#include <stdio.h>
int main() {
int32_t x = 0x01234567;
for (int i = 0; i < 4; ++i) {
printf("%.2x ", ((unsigned char *)(&x))[i]);
}
}
The above snippet can be used to check endianness on the current machine. If big-endian, the output should be 01 23 45 67. If little-endian, 67 45 23 01.
Network Order
Bytes sent out over a network are always in big-endian mode. For this reason, we call big-endian mode the network byte order. In contrast, the endianness of the machine connected to a network is called host byte order. This may be either big-endian or little-endian.