在 rgba 中转换十六进制颜色时出现负值 (JavaScript)

Negative values while converting hex color in rgba (JavaScript)

我的问题是转换一个带有alpha值的十六进制颜色字符串,并获得四个通道R G B A。 字符串的长度为8(例如:4faabbaa)

我尝试了以下代码,使用按位运算符来转换字符串并获取 rgba。

var hex = "4faabbaa"; //In this case R is correct (79)

var hexint = parseInt(hex, 16);
var r = hexint >> 24;
var g = (hexint & 0x00FF0000) >> 16;
var b = (hexint & 0x0000FF00) >> 8;
var a = hexint & 0x000000FF;

该代码适用于 G B 和 A 通道的所有值,但对于某些 R 值,returns 负值。

例如,如果我使用:

var hex = "ccaabbaa"; //In this case returns a negative R (-52)

Returns R 的负值

为什么??

解决方案是使用>>>而不是>>,因为0x80000000位存储32位有符号整数值中的负号。