-
Notifications
You must be signed in to change notification settings - Fork 0
/
cflags.c
63 lines (53 loc) · 1.07 KB
/
cflags.c
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 "cflags.h"
#include <stdio.h>
uint64_t bit_flip(uint64_t flag, uint8_t bit){
return flag ^ (1<<(bit-1));
}
uint64_t bit_off(uint64_t flag, uint8_t bit){
return flag & ~(1<<(bit-1));
}
uint64_t bit_on(uint64_t flag, uint8_t bit){
return flag | (1<<(bit-1));
}
uint8_t bit_check(uint64_t flag, uint8_t bit){
return (flag & (1<<(bit-1)))!=0;
}
uint64_t bit_set(uint64_t flag, uint8_t pos, uint8_t bit){
return ((flag & ~(1<<(pos-1))) | (bit << (pos-1)));
}
uint8_t bit_count(uint64_t flag){
uint8_t count = 0;
while (flag){
flag &= (flag-1);
count++;
}
return count;
}
void printflag64(uint64_t flag){
int8_t i;
for (i = FOB_64;i>0;--i){
printf("%u",bit_check(flag, i));
}
printf("\n");
}
void printflag32(uint32_t flag){
int8_t i;
for (i = FOB_32;i>0;--i){
printf("%u",bit_check(flag, i));
}
printf("\n");
}
void printflag16(uint16_t flag){
int8_t i;
for (i = FOB_16;i>0;--i){
printf("%u",bit_check(flag, i));
}
printf("\n");
}
void printflag8(uint8_t flag){
int8_t i;
for (i = FOB_8;i>0;--i){
printf("%u",bit_check(flag, i));
}
printf("\n");
}