Complemento inverso y operación de bits



A menudo puede ver operaciones de bits al mirar la expansión de conjunto, así que dele la vuelta y revise


1. Código original, código complementario, código invertido

  • Código original: convierta el valor en binario, el bit más alto representa el bit de signo
  • Código inverso: sobre la base del código original, el número positivo no cambia, el bit de signo negativo no cambia y el resto se invierte
  • Código complementario: sobre la base del código original, el número positivo permanece sin cambios, el signo negativo permanece sin cambios, y los bits restantes se invierten y luego se agregan por 1 (es decir, el código inverso + 1)

Las tres son diferentes formas de almacenamiento de datos por parte de las computadoras, y las computadoras usan códigos complementarios para almacenar datos. Y la computadora puede usar estos tres para sumar y restar


Código inverso:

1+(-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

El código inverso aparece [0000 0000] original y [1000 0000] los dos códigos originales indican 0 positivo y negativo, el complemento

Complemento

1+(-1) = [0000 0001]补 + [1111 1111]补 = [0000 0000]补 = [0000 0000]原

Se resolvieron los diferentes problemas de codificación 0 positiva y negativa.




2. Operación de bits

Las operaciones de bit se realizan en el sistema binario subyacente.

Símbolo Descripción Reglas de cálculo
Y Con Ambos son 1, el resultado es 1
El | O Ambos son 0, el resultado es 0
^ XOR Igual que 0 Diferente 1
~ Negate 0 se convierte en 1, 1 se convierte en 0
<< Desplazar a la izquierda Cada bit binario se desplaza hacia la izquierda unos pocos bits, el bit alto se descarta y el bit bajo se llena con 0s. Significa poder de 2
>> Desplazamiento a la derecha Cada bit binario se desplaza a la derecha unos pocos bits, y el número sin signo se llena con 0 en los bits superiores. Significa dividir por 2
Número firmado, el método de procesamiento de cada compilador es diferente, algunos complementan el bit de signo (desplazamiento aritmético a la derecha) y algunos complementan a 0 (desplazamiento lógico a la derecha)
>>> Desplazamiento lógico a la derecha Independientemente del bit de signo, cambie directamente a la derecha, relleno cero



3. Operación real


Juzgar la paridad

// 最末尾为0偶数,1奇数
public static void main(String[] args) throws IOException {

    int a = 4;
    if( (a & 1) == 0){
        System.out.println("偶数");
    }else{
        System.out.println("奇数");
    }
}

Módulo

h & (length-1)
    
// 其实很简单,主要看length
// &运算,就算h全部为1,&之后都是看length有1的部分,高位全为0
// 那么最大只能是length,所以范围限定在了length里,比 % 运算快多了
// -1为了符合数组0开始
// 这也是扩容为2次幂的原因,配合取模运算

Potencia de 2 (solo uno 1, otros bits son 0)

1---0001
2---0010
4---0100
8---1000

Poder rápido

int poww(int a,int b){
    int res = 1;
    int base = a;
    
    while(b != 0){
        if( b & 1 != 0){	// 找到二进制尾数为1的
            res *= base;	// 结果乘于幂
        }
        base *= base;		// 这里呢,一直乘,模拟次幂递增,如果上面为1了,那么这样就会对应到乘于几次幂
        b >>= 1;
    }
    return res;
}

Adición bit a bit

public int Add(int num1,int num2) {
        
    while(num2 != 0){
        int sum = num1 ^ num2;  // 计算有单个1的位(0和0位不用计算了,1和1进位给下面操作了)
        int carry = (num1 & num2) << 1;  // 进位操作
        num1 = sum;
        num2 = carry;
    }
    return num1;
}


Supongo que te gusta

Origin www.cnblogs.com/Howlet/p/12706396.html
Recomendado
Clasificación