#include <iostream>
#include <limits.h>
template <typename INT>
INT rol(INT val) {
return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));
}
template <typename INT>
INT signSafeRol(INT val) {
typedef typename std::make_unsigned<INT>::type UINT;
return (INT)(((UINT)val) << 1) | (((UINT)val) >> (sizeof(INT)*CHAR_BIT-1));
}
int main() {
std::cout << rol<std::int32_t>(1 << 31) << "\n";
std::cout << signSafeRol<std::int32_t>(1 << 31) << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGltaXRzLmg+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgSU5UPiAKSU5UIHJvbChJTlQgdmFsKSB7CiAgICByZXR1cm4gKHZhbCA8PCAxKSB8ICh2YWwgPj4gKHNpemVvZihJTlQpKkNIQVJfQklULTEpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIElOVD4gCklOVCBzaWduU2FmZVJvbChJTlQgdmFsKSB7Cgl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxJTlQ+Ojp0eXBlIFVJTlQ7CiAgICByZXR1cm4gKElOVCkoKChVSU5UKXZhbCkgPDwgMSkgfCAoKChVSU5UKXZhbCkgPj4gKHNpemVvZihJTlQpKkNIQVJfQklULTEpKTsKfQoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgcm9sPHN0ZDo6aW50MzJfdD4oMSA8PCAzMSkgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBzaWduU2FmZVJvbDxzdGQ6OmludDMyX3Q+KDEgPDwgMzEpIDw8ICJcbiI7Cn0=