[C++] Сдвиг >> unsigned и signed
тоже самое и наоборот.
при сдвиге вправо отрицательных чисел (есесно signed) - результат имплементэйшн дефайнед (с) стандарт
abs(x):=x-(x<<1)&(-(x>>31 - в MSVC пришлось делать x-x<<1)&(-(intunsigned)x>>31
вопрос в сторону: чем стандартный abs(x) не устраивает?
я плакалъ
Устраивает, просто интересно было, вот и надумал формулку.
Тут максус какой-то такой же изврат спрашивал для процессоров, умеющих только сдвиги...
Либо, если кроссплатформенность не требуется, пиши на асме, юзай rol/ror/shl/shr
Мимо! rol ror это циклические сдвиги которые к теме отношения не имеют, они ставят на старшие позиции "исчезнувшие" младшие биты. Правильный ответ sar.
а.. ну, да... Просто доки дельной нет под рукой (если не считать нечто под названием TeachHelp поэтому написал по памяти.
![](/images/graemlins/wink.gif)
Оставить комментарий
Olenenok
Столкнулся в MSVC 2005 со следующим:Для signed int этот сдвиг сохраняет значение старшего бита (т.е., например, 0x80000000 >> 31 = 0xffffffff а вот для unsigned int 0x80000000 >> 31 = 1. Это стандарт?