java 0xff是什么意思_Java和0xff的值是什么?

来自http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff

十六进制文字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 ......)将表现得像%运算符。

然后

在二进制中,0是全零,255看起来像这样:

00000000 00000000 00000000 11111111

-1看起来像这样

11111111 11111111 11111111 11111111

当您执行0xFF的按位AND和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;

重新设置(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

以上内容对于交换两个没有temp的变量非常有用,如下所示

a = a ^ b; b = a ^ b; a = a ^ b;

要么

a ^= b ^= a ^= b;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值