[C++] Сдвиг >> unsigned и signed
да, потому что если мы делим -4 на 4(сдвигаем на 2 то хотим получить -1, а не число в районе миллиарда.
тоже самое и наоборот.
тоже самое и наоборот.
при сдвиге вправо отрицательных чисел (есесно signed) - результат имплементэйшн дефайнед (с) стандарт
Вот это и хотел узнать. Столкнулся с этим при вычислении модуля целого числа по формуле
abs(x):=x-(x<<1)&(-(x>>31 - в MSVC пришлось делать x-x<<1)&(-(intunsigned)x>>31
abs(x):=x-(x<<1)&(-(x>>31 - в MSVC пришлось делать x-x<<1)&(-(intunsigned)x>>31
вопрос в сторону: чем стандартный abs(x) не устраивает?
я плакалъ
Устраивает, просто интересно было, вот и надумал формулку.
Тут максус какой-то такой же изврат спрашивал для процессоров, умеющих только сдвиги...
Вообще-то на асме есть инструкции как для знакового сдвига, так и для беззнакового. Так что, наверное, можно написать unsigned int)variable) >> n, и не париться..
Либо, если кроссплатформенность не требуется, пиши на асме, юзай rol/ror/shl/shr
Либо, если кроссплатформенность не требуется, пиши на асме, юзай rol/ror/shl/shr
Мимо! rol ror это циклические сдвиги которые к теме отношения не имеют, они ставят на старшие позиции "исчезнувшие" младшие биты. Правильный ответ sar.
а.. ну, да... Просто доки дельной нет под рукой (если не считать нечто под названием TeachHelp поэтому написал по памяти.
Я в Гугле нашел 

Оставить комментарий
Olenenok
Столкнулся в MSVC 2005 со следующим:Для signed int этот сдвиг сохраняет значение старшего бита (т.е., например, 0x80000000 >> 31 = 0xffffffff а вот для unsigned int 0x80000000 >> 31 = 1. Это стандарт?