将签名值存储在字节中

时间:2015-06-06 15:14:47

标签: java primitive

我试图将字节值存储在变量中,并尝试根据此计算执行某些逻辑。

byte mByteValue = -129;   // Holding byte value

问题是我总是得到值127,因此我的逻辑每次都会失败。

这背后的任何具体原因,为什么它在我的情况下表现得很奇怪?

3 个答案:

答案 0 :(得分:3)

java中的byte签名的 8位值。 8位为您提供256个可能的值,但由于byte 已签名并且可以表示正负值,因此这256个值必须大致分为两半可能的正面和负面价值。因此,您无法将负值存储在 -128 之后;特别是不希望能够存储-256

当您的字节值为127时,您实际观察到的内容称为溢出(请参阅this wiki article

如果您需要操作此范围之外的值,例如在示例代码中,或者例如一个无符号字节,在某些时候你需要使用更宽的整数类型,比如short

标准库提供的这些限制为Byte.MIN_VALUEByte.MAX_VALUE(文档herehere)。

答案 1 :(得分:0)

byte的范围是-128到127.您不能存储超出这些范围的任何值。

这是因为byte是8位。因此,存储在字节的最大正数是 -

2^7 -1 = 127. // since the first bit is sing bit; 0 for positive

存储在byte的最小负数是 -

2^7 = -128 //since the first bit is sign bit; 1 for negative.

如果你使用unsigned字节,它将是255。

答案 2 :(得分:0)

要正确地将字节转换为int,请使用NavigationBar *navigationBar = self.navigationController.navigationBar; navigationBar.backgroundColor = [UIColor colorWithRed:197.0f/255.0f green:174.0f/255.0f blue:135.0f/255.0f alpha:1.0]; navigationBar.barTintColor = [UIColor colorWithRed:197.0f/255.0f green:174.0f/255.0f blue:135.0f/255.0f alpha:1.0]; 。您可以在此处详细了解mByteValue & 0xFFhttps://en.wikipedia.org/wiki/Two%27s_complement