#include #include #include #include #include #define PRINT_BITS(number) { \ unsigned int n = (number); \ unsigned int size_of_int = sizeof(n) * 8; \ int space = 0; \ for (int i = size_of_int - 1; i >= 0; i--) { \ unsigned int mask = 1 << i; \ putchar(n & mask ? '1' : '0'); \ if (++space % 4 == 0 && i != 0) putchar(' '); \ } \ putchar('\n'); \ } /* Function declarations */ void Ex1(); void Ex2(); void Ex3(); void Ex4(); void Ex5(); void Ex6(); void Ex7(); void Ex8(); void Ex9(); void Ex10(); void Ex11(); void Ex12(); void Ex13(); void Ex14(); void Ex15(); void Ex16(); void Ex17(); void Ex18(); void Ex19(); void Ex20(); void Ex21(); void Ex22(); void Ex23(); void Ex24(); void Ex25(); void Ex26(); void Ex27(); void Ex28(); int main(void) { int select = 0, i, all_Ex_in_loop = 0; printf("Run menu once or cyclically?\n(Once - enter 0, cyclically -enter other number) "); if (scanf("%d", &all_Ex_in_loop) == 1) do { for (i = 1; i <= 28; i++) printf("Ex%d--->%d\n", i, i); printf("EXIT-->0\n"); do { select = 0; printf("please select 0-28 : "); scanf("%d", &select); } while ((select < 0) || (select > 28)); switch (select) { case 1: Ex1(); break; case 2: Ex2(); break; case 3: Ex3(); break; case 4: Ex4(); break; case 5: Ex5(); break; case 6: Ex6(); break; case 7: Ex7(); break; case 8: Ex8(); break; case 9: Ex9(); break; case 10: Ex10(); break; case 11: Ex11(); break; case 12: Ex12(); break; case 13: Ex13(); break; case 14: Ex14(); break; case 15: Ex15(); break; case 16: Ex16(); break; case 17: Ex17(); break; case 18: Ex18(); break; case 19: Ex19(); break; case 20: Ex20(); break; case 21: Ex21(); break; case 22: Ex22(); break; case 23: Ex23(); break; case 24: Ex24(); break; case 25: Ex25(); break; case 26: Ex26(); break; case 27: Ex27(); break; case 28: Ex28(); break; } } while (all_Ex_in_loop && select); return 0; } void set_bit(uint32_t* src, uint8_t bit){ *src |= (1 << bit); } void Ex1() { uint32_t number = 0; PRINT_BITS(number); set_bit(&number,3); PRINT_BITS(number); set_bit(&number,31); PRINT_BITS(number); } void clear_bit(uint32_t* src, uint8_t bit){ *src &= ~(1 << bit); } void Ex2() { uint32_t number = UINT32_MAX; PRINT_BITS(number); clear_bit(&number,3); PRINT_BITS(number); clear_bit(&number,31); PRINT_BITS(number); } void toggle_bit(uint32_t* src, uint8_t bit){ *src ^= (1 << bit); } void Ex3() { uint32_t number = 0; PRINT_BITS(number); toggle_bit(&number,3); PRINT_BITS(number); toggle_bit(&number,31); PRINT_BITS(number); toggle_bit(&number,3); PRINT_BITS(number); } /* * also set off */ void reset_all(uint32_t* number){ *number = 0; } void Ex4() { uint32_t number = 123123123; PRINT_BITS(number); reset_all(&number); PRINT_BITS(number); } /* * Not generic */ void set_all(uint32_t* number){ uint32_t mask = UINT32_MAX; *number |= mask; } void Ex5() { uint32_t number = 0; PRINT_BITS(number); set_all(&number); PRINT_BITS(number); } void set_all_generic(uint32_t* number){ *number |= ~0; } void Ex6() { uint32_t number = 0; PRINT_BITS(number); set_all_generic(&number); PRINT_BITS(number); } uint8_t is_power_of_two(uint32_t* src){ return (*src &= (*src - 1)) == 0? 1 : 0; } void Ex7() { uint32_t test = 16; is_power_of_two(&test)? printf("Y\n") : printf("N\n"); test = 7; is_power_of_two(&test)? printf("Y\n") : printf("N\n"); } uint8_t get_val(uint32_t* src, uint8_t bit_loc){ return (*src >> bit_loc) & 1; } void Ex8() { uint32_t test = 16; printf("bit is %d\n",get_val(&test,2)); test = 7; printf("bit is %d\n",get_val(&test,0)); } /* * todo: * mirror bits * rotate_left * rotate_right * count_on * count_off * to_string * add_one * * void_swap * strlen_implementation * strcpy_implementation * strcmp_implementation * strcat_implementation * my_memcpy * my_memset * my_memmove * * deadlock (how do that with 2 threads + 2 mutexes) * do project (uml + visual) * OOD * * aligned_malloc * aligned_free */ void Ex9() { } void Ex10() { } //------------------------------------------------------------------------------ void Ex11() { } void Ex12() { } void Ex13() { } void Ex14() { } void Ex15() { } void Ex16() { } void Ex17() { } void Ex18() { } void Ex19() { } void Ex20() { } void Ex21() { } void Ex22() { } void Ex23() { } void Ex24() { } void Ex25() { } void Ex26() { } void Ex27() { } void Ex28() { }