我试图将字节值存储在变量中,并尝试根据此计算执行某些逻辑。
byte mByteValue = -129; // Holding byte value
问题是我总是得到值127,因此我的逻辑每次都会失败。
这背后的任何具体原因,为什么它在我的情况下表现得很奇怪?
答案 0 :(得分:3)
java中的byte
是签名的 8位值。 8位为您提供256个可能的值,但由于byte
已签名并且可以表示正和负值,因此这256个值必须大致分为两半可能的正面和负面价值。因此,您无法将负值存储在 -128 之后;特别是不希望能够存储-256
。
当您的字节值为127
时,您实际观察到的内容称为溢出(请参阅this wiki article)
如果您需要操作此范围之外的值,例如在示例代码中,或者例如一个无符号字节,在某些时候你需要使用更宽的整数类型,比如short
。
答案 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 & 0xFF
:https://en.wikipedia.org/wiki/Two%27s_complement。