poner - titledborder java
¿Ventaja de usar 0x01 en lugar de 1 para una variable entera? (4)
Recientemente me encontré con una línea como esta
public static static int DELETION_MASK = 0x01;
porque no es como
public static static int DELETION_MASK = 1;
¿Hay alguna ventaja en el uso del primer enfoque distinto de 0xA y los hexadecimales de límite superior se pueden convertir con facilidad? En este caso es solo una constante que representa 1.
Ayuda con la conversión mental entre el valor entero y el patrón de bits que representa, que es lo que importa para las banderas y las máscaras.
Debido a que 16 es un poder de 2 (a diferencia de 10), obtienes buenas cosas como esta:
public final static int A_FLAG = 0x01; // 00000001
public final static int B_FLAG = 0x02; // 00000010
public final static int C_FLAG = 0x04; // 00000100
public final static int D_FLAG = 0x08; // 00001000
public final static int E_FLAG = 0x10; // 00010000
public final static int F_FLAG = 0x20; // 00100000
public final static int G_FLAG = 0x40; // 01000000
public final static int H_FLAG = 0x80; // 10000000
Es facil de entender Cuando pensamos en enmascarar, entonces pensamos en números HEX o BIN.
Solo eso, será coherente cuando defina NONDELETION_MASK = 0x0A.
Si bien no hay una diferencia en el código producido por el compilador, las máscaras de bits se escriben tradicionalmente usando la notación hexadecimal, porque es mucho más fácil para un humano convertir a una forma binaria. Otra convención común es incluir los ceros iniciales cuando se conoce la longitud del campo. Por ejemplo, para un campo C int
, es común escribir:
#define MASK 0x0000ffff
Además, las constantes hexadecimales indican al programador que probablemente sea una máscara de bits, o un valor que estará involucrado de alguna manera en las operaciones bitwise y que probablemente deba tratarse de manera especial.
Como 0xffffffff
adicional, las notaciones hexadecimales también pueden evitar problemas con números negativos: 0xffffffff
es de hecho un número negativo ( -1
para ser exactos). En lugar de hacer malabares con el signo y los números del complemento a 2, puede simplemente especificar la máscara en hexadecimal y terminar con ella.
Desde Java 7, también puede usar literales binarios, lo que hace que sea aún más fácil para un humano comprender qué bits se configuran en una máscara de bits. Y los literales binarios pueden usar underscores para colocar los bits en grupos separados.
Eso significa que lo siguiente también es válido:
public final static int DELETION_MASK = 0b0000_0001;