#include <stdio.h>
const int CHAR_BIT = 8;
/* 
int problem2(int x, int n){

    int temp = x;
    uint32_t mask;
    int maskco;

    mask = 0xFFFFFFFF << n;
    maskco = (mask | temp);

	return (maskco) == x;
}
*/
int problem2_mj(int x, int n){
	unsigned int r;
	int const mask = (-x) >> sizeof(int) * CHAR_BIT - 1;
	
	r = (-x + mask - (1 & mask)) ^ mask;  // Converts +n -> n, -n -> (n-1)
	return !(((1 << (n-1)) - r) >> sizeof(int) * CHAR_BIT - 1);
}

void test(int i) {
	int t;
	for(t = 1; t <= 10; ++t) {
		const int res = problem2_mj(i, t);
		printf("(%d, %d) -> %s\n", i, t, res ? "TRUE": "FALSE");
		if(res) {
			printf("\n");
			break;
		}
	}
}

int main(void) {
	int i;
	for(i = -20; i <= 20; ++i) test(i);
	return 0;
}
