Personally I find bit-twiddling in C to be painful compared to bit twiddling in assembly.
For my Arduino projects in particular I never make recursive function calls, and would be happy to statically allocate everything in RAM. The stack-oriented activation records in C, calling conventions, return values, are more a problem than a solution.