fork(1) download
  1. #include <iostream>
  2. #include <limits.h>
  3.  
  4. template <typename INT>
  5. INT rol(INT val) {
  6. return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));
  7. }
  8.  
  9. template <typename INT>
  10. INT signSafeRol(INT val) {
  11. typedef typename std::make_unsigned<INT>::type UINT;
  12. return (INT)(((UINT)val) << 1) | (((UINT)val) >> (sizeof(INT)*CHAR_BIT-1));
  13. }
  14.  
  15. int main() {
  16. std::cout << rol<std::int32_t>(1 << 31) << "\n";
  17. std::cout << signSafeRol<std::int32_t>(1 << 31) << "\n";
  18. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
-1
1