--- # Documentation: https://sourcethemes.com/academic/docs/managing-content/ title: "Bit magic in C (and C++)" subtitle: "" summary: "Tips and trick for embedded C/C++" authors: [] tags: [] categories: [] date: 2020-06-13T19:01:19+02:00 lastmod: 2020-06-13T19:01:19+02:00 featured: false draft: false # Featured image # To use, add an image named `featured.jpg/png` to your page's folder. # Focal points: Smart, Center, TopLeft, Top, TopRight, Left, Right, BottomLeft, Bottom, BottomRight. image: caption: "" focal_point: "" preview_only: false # Projects (optional). # Associate this post with one or more of your projects. # Simply enter your project's folder or file name without extension. # E.g. `projects = ["internal-project"]` references `content/project/deep-learning/index.md`. # Otherwise, set `projects = []`. projects: [] --- # Set a bit ```c // Set one bit high at position "bit" in input and store to output output = input | (1 << bit); // Shorthand variable |= (1 << bit); // Multiple bits variable |= (0b101 << bit); ``` # Clear a bit ```c // Clear one bit high at position "bit" in input and store to output output = input & ~(1 << bit); // Shorthand variable &= ~(1 << bit); // Multiple bits variable &= ~(0b101 << bit); ``` # Toggle a bit ```c // Clear one bit high at position "bit" in input and store to output output = x ^ (1 << bit); // Shorthand variable ^= (1 << bit); // Multiple bits variable ^= (0b101 << bit); ``` # Math ```c // Division using bitshift output = input >> 1; // Divide by 2 output = input >> 2; // Divide by 4 output = input >> 3; // Divide by 8 // Multiply using bitshifting output = input << 1; // Multiply by 2 output = input << 2; // Multiply by 4 output = input << 3; // Multiply by 8 ``` # Set X number of bits high. ```c output = (0b1 << X) -1; ``` # Miscellaneous ```c // Check if number is ODD if( (num & 1) == 1) {}; // Flip signed integer num = ~num + 1; // Power of two num > 0 && (num & (num - 1)) == 0; ```