summaryrefslogtreecommitdiff
path: root/bit/bit.c
diff options
context:
space:
mode:
Diffstat (limited to 'bit/bit.c')
-rwxr-xr-xbit/bit.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/bit/bit.c b/bit/bit.c
new file mode 100755
index 0000000..a4924a0
--- /dev/null
+++ b/bit/bit.c
@@ -0,0 +1,54 @@
+#include "bit.h"
+
+
+u64 flp2(u64 x){
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+ x |= (x >> 32);
+ return x - (x >> 1);
+}
+
+u32 flp2_32(u32 x){
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+ return x - (x >> 1);
+}
+
+u64 clp2(u64 x){
+ x -= 1;
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+ x |= (x >> 32);
+ return x + 1;
+}
+
+u32 clp2_32(u32 x){
+ x -= 1;
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+ return x + 1;
+}
+
+void _bitstofile(void const * const ptr, size_t const size, FILE *fp){
+ unsigned char *b = (unsigned char*)ptr;
+ for(int i = size-1; i >= 0; i--){
+ for(int j = 7; j >= 0; j--){
+ unsigned char byte = ((b[i] >> j) & 1) ? '1' : '0';
+ fputc(byte, fp);
+ }
+ if(i != 0) fputc(' ', fp);
+ }
+}
+