Java二进制运算

    xiaoxiao2021-03-25  107

    位运算:

    左移位:<<

    /* 00000001 << 1 = 00000010 */ 1 << 1 == 2 /* 00000001 << 3 = 00001000 */ 1 << 3 == 8

    右移位:>> 是有符号操作符,使用最高位来表示数值的正负,负数的最高位永远为1。一个以1开头的二进制数移位后还将以1开头,一个以0开头的二进制树移位后还将以0开头。

    /* 11111111 11111111 11111111 11110000 >> 4 = 11111111 11111111 11111111 11111111 */ 0xFFFFFFF0 >> 4 == 0xFFFFFFFF /* 00001111 11111111 11111111 11111111 >> 4 = 00000000 11111111 11111111 11111111 */ 0x0FFFFFFF >> 4 == 0x00FFFFFF

    可以使用叫作“无符号右移”运算符的第三个操作符:>>>来实现以“0”填充的移位,这种移位会忽略符号位并总是用“0”来填充。最大的用途是迅速求2的幂。1向左移1位是2,移2位是4,相似的,向右移1位相当于是把该数除以2。

    /* 10000000 00000000 00000000 00000000 >>> 1 = 01000000 00000000 00000000 00000000 */ 0x80000000 >>> 1 == 0x40000000 /* 10000000 00000000 00000000 00000000 >> 1 = 11000000 00000000 00000000 00000000 */ 0x80000000 >> 1 == 0xC0000000

    位运算操作符

    以下是Java中四个常见的位操作符: ~ : 按位取反 & : 按位与(全1为1,有0则为0) | : 按位或(有1为1,全0则为0) ^ : 按位异或(相同为0,不同为1)

    比如:

    1010 & 0101 == 0000 1100 & 0110 == 0100 1010 | 0101 == 1111 1100 | 0110 == 1110 ~1111 == 0000 ~0011 == 1100 1010 ^ 0101 == 1111 1100 ^ 0110 == 1010

    你可以通过“或”运算,把一个二进制数上的指定位“设置”为1,并且不会影响到其他位。 10000001 | 00100000 = 10100001 /* 第五位设为1 */ 10000001 | 1 << 5 = 10100001 /* 同样作用 */ 00000000 | 1 << 2 | 1 << 5 = 00100100

    转载请注明原文地址: https://ju.6miu.com/read-34500.html

    最新回复(0)