如何在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;
答案 0 :(得分:13)
与Java不同,C具有无符号整数类型。您应该始终使用无符号整数类型进行按位操作。除非你是C的专家,否则使用签名类型进行操作会引导你进入一个可怕的行为,即恶魔从你的鼻子里飞出来。
答案 1 :(得分:5)
在转移之前将值转换为(unsigned int)
。