If you are doing bit manipulation that's more complicated than vectors of boolean flags, you are likely going to use both bitwise and arithmetic operations on the same data. If you need separate types for those operations, you will need many explicit casts in your code. That is usually a sign that something is wrong.
In low-level code, integer types are not numbers. They are fixed-length bit fields with a numerical interpretation. One thing I like in Rust over C/C++ is that it makes this clear. You always specify the size and signedness of the integer explicitly, and the standard library provides many useful operations beyond the operators.
In low-level code, integer types are not numbers. They are fixed-length bit fields with a numerical interpretation. One thing I like in Rust over C/C++ is that it makes this clear. You always specify the size and signedness of the integer explicitly, and the standard library provides many useful operations beyond the operators.