java中>>和>>>的区别

    科技2026-06-04  13

    带符号右移>>

    运算规则:正数右移高位补0,负数右移高位补1。 比如:

    4>>1 = 2 0000 0000 0000 0000 0000 0000 0000 0100 // 4 右移一位 0000 0000 0000 0000 0000 0000 0000 0010 // 2 -4>>1 = -2 1000 0000 0000 0000 0000 0000 0000 0100 // -4的原码 1111 1111 1111 1111 1111 1111 1111 1011 // -4的反码:原码符号位不变,其他位取反 1111 1111 1111 1111 1111 1111 1111 1100 // -4的补码:反码加1 右移一位 1111 1111 1111 1111 1111 1111 1111 1110 // 补码形式,表示几呢 1000 0000 0000 0000 0000 0000 0000 0001 // 反码形式 1000 0000 0000 0000 0000 0000 0000 0010 // -2的原码:反码加1 1>>1 = 0 0000 0000 0000 0000 0000 0000 0000 0001 // 1 右移一位 0000 0000 0000 0000 0000 0000 0000 0000 // 0 -1>>1 = -1 1000 0000 0000 0000 0000 0000 0000 0001 // -1的原码 1111 1111 1111 1111 1111 1111 1111 1110 // -1的反码 1111 1111 1111 1111 1111 1111 1111 1111 // -1的补码 右移一位 1111 1111 1111 1111 1111 1111 1111 1111 // -1的补码

    无符号右移>>>

    运算规则:不管是正数还是负数右移,高位通通补0。 比如:

    4>>>1 = 2 0000 0000 0000 0000 0000 0000 0000 0100 // 4 右移一位 0000 0000 0000 0000 0000 0000 0000 0010 // 2 -4>>>1 = 2147483646 1000 0000 0000 0000 0000 0000 0000 0100 // -4的原码 1111 1111 1111 1111 1111 1111 1111 1011 // -4的反码:原码符号位不变,其他位取反 1111 1111 1111 1111 1111 1111 1111 1100 // -4的补码:反码加1 右移一位 0111 1111 1111 1111 1111 1111 1111 1110 // 2147483646

    二者的区别

    对于正数而言,二者没有区别 对于负数而言,>>>运算高位补0,>>运算高位补1

    Processed: 0.013, SQL: 9