Логическое смещение вправо на отрицательные целые числа в C? - PullRequest
6 голосов
/ 05 июня 2011

Как можно выполнить логический сдвиг вправо отрицательных чисел в C? В основном я ищу эквивалент C >>> в Java

т.е.

int one = -16711936 ;
        //int two = -16711936 ;
        //int three = -1;
        int r, g, b;
        System.out.println(Integer.toBinaryString(one));
         r = one << 8;
         r >>>= 24;

         g = one << 16;
         g >>>= 24;  //this always ends up being -1 in C, instead of 255

         b = one << 24;
         b >>>= 24;

Ответы [ 2 ]

13 голосов
/ 05 июня 2011

В отличие от Java, C имеет целочисленные типы без знака.Вы должны всегда использовать целочисленные типы без знака для побитовой манипуляции, подобной этой.Если вы не являетесь экспертом в C, то выполнение этого с подписанными типами приведет вас в страшное царство неопределенного поведения, где демоны вылетают из вашего носа.

5 голосов
/ 05 июня 2011

Приведите значение к (unsigned int) перед сдвигом.

...