1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include <stdint.h>
#include <stdbool.h>
#include "print_bits.h"
bool get_bit(uint8_t byte, int bit_idx) {
uint8_t mask = 0x01 << bit_idx; // single bit 1 set
// bit_idx 0s to the right
uint8_t set_bit = byte & mask; // 0 if bit unset
// mask if bit is set
return set_bit == mask;
}
uint8_t set_bit(uint8_t byte, int bit_idx, bool new_value) {
uint8_t mask = 0x01 << bit_idx; // 1 in exactly 1 bit
if (new_value) {
byte |= mask; // same as byte = byte | mask
} else {
// ~mask has a 0 in exactly 1 bit
byte &= ~mask;
}
return byte;
}
uint8_t get_bits(uint8_t byte, int start_bit, int end_bit) {
return byte;
}
uint8_t set_bits(uint8_t byte, int bit_idx,
uint8_t new_bits, int num_bits) {
return byte;
}
#define log_bool(b) printf("(%s) == %s\n", (#b), b ? "true" : "false")
int main(int argc, char* argv[]) {
uint8_t bits = 0x5f; // 0b01011111
print_bits_plain(bits);
log_bool(get_bit(bits, 0));
log_bool(get_bit(bits, 1));
log_bool(get_bit(bits, 2));
log_bool(get_bit(bits, 3));
log_bool(get_bit(bits, 4));
log_bool(get_bit(bits, 5));
log_bool(get_bit(bits, 6));
log_bool(get_bit(bits, 7));
print_bits_plain(bits);
uint8_t updated_bits = set_bit(bits, 5, true);
print_bits_plain(updated_bits);
print_bits_plain(bits);
updated_bits = set_bit(bits, 2, false);
print_bits_plain(updated_bits);
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2022 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.