C中负整数的逻辑右移?

smo*_*hie 6 c bit

如何在C中对负数进行逻辑右移?基本上我在寻找>>>Java中的C等价物

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;
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 13

与Java不同,C具有无符号整数类型.您应该始终使用无符号整数类型进行按位操作.除非你是C的专家,否则使用签名类型进行操作会引导你进入一个可怕的未定义行为领域,恶魔从你的鼻子里飞出来.


dan*_*n04 5

(unsigned int)在转移之前将值转换为.

  • 更好的是,首先使用无符号类型.使用带符号类型来打包这样的值是危险的,特别是如果程序员习惯于Java并且不知道C的规则. (3认同)