sirve - C#, notación hexadecimal y enteros con signo
para que sirve el sistema hexadecimal (3)
Bueno, puedes usar un bloque sin marcar y un molde:
unchecked
{
int ALPHA_MASK = (int)0xff000000;
}
o
int ALPHA_MASK = unchecked((int)0xff000000);
No es terriblemente conveniente, sin embargo ... ¿tal vez solo use un entero literal?
Esta es una pregunta de seguimiento .
Por lo tanto, los enteros de Java Store en complementos de dos y puede hacer lo siguiente:
int ALPHA_MASK = 0xff000000;
En c # esto requiere el uso de un entero sin signo, uint, porque interpreta que es 4278190080 en lugar de -16777216.
Mi pregunta, ¿cómo declarar valores negativos en notación hexadecimal en c #, y cómo exactamente se representan internamente los números enteros? ¿Cuáles son las diferencias con Java aquí?
C # (mejor dicho, .NET) también usa el complemento de dos, pero admite tanto los tipos firmados como los no firmados (lo que Java no hace). Una máscara de bit es, naturalmente, algo sin firmar: ¿por qué un bit debería ser diferente de todos los demás?
En este caso específico, es seguro usar un elenco sin marcar:
int ALPHA_MASK = desmarcado ((int) 0xFF000000);
Editar (agregado):
Para "directamente" representar este número como un valor firmado, usted escribe
int ALPHA_MASK = -0x1000000; // == -16777216
El hexadecimal no es (o no debería ser) diferente del decimal: para representar un número negativo, debe escribir un signo negativo, seguido de los dígitos que representan el valor absoluto.
Y solo para agregar un insulto a la lesión, esto también funcionará:
-0x7F000000