Java中的值&0xff是做什么的?
我有以下Java代码:
byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned) int result = value & 0xff;  打印结果是254,但我不知道这个代码是如何工作的。 如果&运算符只是按位,那么为什么它不会导致一个字节,而是一个整数? 
 它将result设置为将8位value放入结果的最低8位所得到的(无符号)值。 
 像这样的东西是必要的原因是该byte是在Java中的签名types。 如果你只是写道: 
 int result = value; 
 那么result将会以“ ff ff ff fe而不是“ 00 00 00 fe 。 另一个微妙之处在于, &被定义为只对int值1进行操作,所以会发生什么: 
-   value被提升为int(ff ff ff fe)。
-   0xff是一个int文字(00 00 00 ff)。
-   &被应用以产生期望的result值。
  (重点在于, 在应用&运算符之前转换为int 。) 
  1 好吧,不是。  如果任一操作数很long ,那么&运算符也适用于long值。  但不是byte 。  请参阅Java语言规范,第15.22.1和5.6.2节。 
来自http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff
hex文字0xFF是一个相等的int(255)。 Java将int表示为32位。 它在二进制中看起来像这样:
 00000000 00000000 00000000 11111111 
当你在任何数字上用这个值(255)做一个明智的AND时,它将屏蔽(使ZERO)除了数字的最低8位(将原样)。
 ... 01100100 00000101 & ...00000000 11111111 = 00000000 00000101 
&就像%,但不是真的 。
为什么0xff? 这在((2的幂)-1)中。 所有((2的幂)-1)(例如7,255 …)将performance得像%操作符。
 然后 
 在二进制中,0是全零,而255是这样的: 
 00000000 00000000 00000000 11111111 
和-1看起来像这样
 11111111 11111111 11111111 11111111 
当你做一个按位的和的0xFF和从0到255的任何值,结果是完全一样的值。 如果任何高于255的值仍然会在0-255之内。
但是,如果你这样做:
 -1 & 0xFF 
你得到
  00000000 00000000 00000000 11111111 ,它不等于-1的原始值( 11111111是十进制的255)。 
几位操作:(不涉及问题)
 X >> 1 = X/2 X << 1 = 2X 
检查是否设置了(1)或不是(0)
  int thirdBitTobeChecked = 1 << 2 (...0000100) int onWhichThisHasTobeTested = 5 (.......101) int isBitSet = onWhichThisHasTobeTested & thirdBitTobeChecked; if(isBitSet > 0) { //Third Bit is set to 1 } 
设置(1)一个特定的位
  int thirdBitTobeSet = 1 << 2 (...0000100) int onWhichThisHasTobeSet = 2 (.......010) onWhichThisHasTobeSet |= thirdBitTobeSet; 
ReSet(0)一个特定的位
 int thirdBitTobeReSet = ~(1 << 2) ; //(...1111011) int onWhichThisHasTobeReSet = 6 ;//(.....000110) onWhichThisHasTobeReSet &= thirdBitTobeReSet; 
XOR
请注意,如果您执行两次XOR操作,结果将是相同的值。
 byte toBeEncrypted = 0010 0110 byte salt = 0100 1011 byte encryptedVal = toBeEncrypted ^ salt == 0110 1101 byte decryptedVal = encryptedVal ^ salt == 0010 0110 == toBeEncrypted :) 
XOR的另一个逻辑是
 if A (XOR) B == C (salt) then C (XOR) B == A C (XOR) A == B 
上面的内容对于像下面那样交换两个variables是非常有用的
 a = a ^ b; b = a ^ b; a = a ^ b; 
要么
 a ^= b ^= a ^= b; 
这有助于减less大量的代码。 偶尔使用由8位组成的RGB值。
 其中0xff表示24(0)和8(1)像00000000 00000000 00000000 11111111 
它有效地掩盖了variables,所以它只留下最后8位的值,忽略所有其余的位
在尝试将颜色值从特殊格式转换为标准RGB值(长度为8位)时,这种情况最为常见。
很好的解释请看这里
 在32位格式系统中,hex值0xff表示00000000000000000000000011111111 ,即十进制的255(15*16^1+15*16^0) 。 并按位运算符屏蔽与第一个操作数相同的最右边的8个位。