In this short article I will exaplain how to use bit-level operations to verify that integer is even or odd. It’s very useful and fast verification.
Examples below have been compiled and tested using gnu-gcc.
$/> gcc example.c -o example
CHECK EVEN
To verify that integer is even we need to check first bit is not set.
#include <stdint.h>
#include <assert.h>
int
main(void)
{
uint8_t n = 10; // 0b00001010
assert((n & 1) == 0);
return (0);
}
CHECK ODD
To verify that integer is odd we need to check first bit is set.
#include <stdint.h>
#include <assert.h>
int
main(void)
{
uint8_t n = 11; // 0b00001011
assert((n & 1) > 0);
return (0);
}
USEFUL MACROS
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
#define IS_EVEN(n) (((n) & 0x01) == 0)
#define IS_ODD(n) (((n) & 0x01) > 0)
int
main(void)
{
assert(IS_EVEN(1) == false);
assert(IS_EVEN(2) == true);
assert(IS_ODD(1) == true);
assert(IS_ODD(2) == false);
return (0);
}