examples/bitwise.c
Rama main · réplica de lectura del repositorio original.
// left shifting, bitwise ORing, and logical right shifting in C*
// libcstar procedures for printing
void init_library();
void print(uint64_t* s);
void print_integer(uint64_t n);
void print_binary(uint64_t n, uint64_t a);
void println();
// libcstar procedures for left and right shifting
uint64_t left_shift(uint64_t n, uint64_t b);
uint64_t right_shift(uint64_t n, uint64_t b);
uint64_t main() {
uint64_t i;
uint64_t j;
uint64_t u;
// initialize selfie's libcstar library
init_library();
// initialize the integer i to binary 0000000000000000000000000000000000000000000000000000000000000011
i = 3;
// initialize the integer u to i
u = i;
// repeat until i is equal to 0
while (i != 0) {
// print i in binary
print_binary(i, 64);
print(" in binary = ");
print_integer(i);
print(" in decimal");
println();
// remember value of i
j = i;
// shift i to the left by 6 bits
i = left_shift(i, 6);
// signed integer addition here amounts to bitwise OR because
// the bits at the same index in u and i are never both 1 so
// there will not be any carry bit set
u = u + i;
}
// print u in binary
print_binary(u, 64);
print(" in binary = ");
print_integer(u);
print(" in decimal");
println();
// set i to its most recent value before it became 0
i = j;
// repeat until i is equal to 0
while (i != 0) {
// print i in binary
print_binary(i, 64);
print(" in binary = ");
print_integer(i);
print(" in decimal");
println();
// shift i to the right by 6 bits
i = right_shift(i, 6);
}
}