En Java es posible empaquetar un número entero que se espera que no sea negativo y será final (no desbordamiento) en un corto?

StackOverflow https://stackoverflow.com/questions/2520757

  •  22-09-2019
  •  | 
  •  

Pregunta

"unsigned int" en un corto y la espalda. es posible? ¿Cómo hacerlo si es así?

Grrrr. He olvidado cómo se implementan los números con signo. La pregunta no tiene sentido. Gracias de cualquier manera. Iba a downvote mismo, puede hacerlo en su lugar.

¿Fue útil?

Solución

No estoy seguro de entender completamente la pregunta, pero si está seguro de que su int encajan en un corto (que es el número entre 0 y 2 ^ 16) siempre se puede emitir su int a un corto:

int i = 65536;
short s = (short) i;

Y para conseguir la espalda valor sin signo:     int i2 = s y 0xFFFF;     System.out.println (i2);

El s & 0xFFFF se upcast s a un int y la máscara de bits va a "convertir" el número negativo a su valor sin signo (más o menos). Recuerde que FFFF en una variable a corto -1 No 65536.

Otros consejos

Parece que usted está esperando un tipo básico que va a hacer el trabajo por usted, pero no creo que exista. Por otro lado, no me imagino que sería demasiado difícil crear un objeto que hace el trabajo. Ajuste según sea necesario para que sea un corto.

public class SpecialInt {
 int i = 0;

 public void set(int i) {
  if ( i < 0 ) throw new IllegalArgumentException("cannot be negative");
  this.i = i;
 }

 public void add(int j) {
  int t = i+j;
  if( t < i ) throw new IllegalArgumentException("overflow!");
  i = t;
 }

 public void sub(int j) {
  int t = i-j;
  if( t > i ) throw new IllegalArgumentException("overflow!");
  i = t;
 }

 public void mult(int j) {
  int mult_max = Integer.MAX_VALUE / i;
  if( j > mult_max ) throw new IllegalArgumentException("overflow!");
  i *= j;
 }
}

Si su número entero no tiene ninguna característica específica como ser un múltiplo de algo que no creo que puedas.

El problema es que la información contenida en un int, que por lo general es la arquitectura de 32 bits no puede estar contenido en un corto.

Como se puede ver desde el valor máximo del tha Short.MAX_VALUE es 2 ^ 15 - 1, ya un corto ocupa 16 bits .. lo que en realidad la precisión perder y no se puede expresar como números enteros 2²² ..

Si desea tipos sin signo, se puede utilizar el href="http://javolution.org/" rel="nofollow noreferrer"> biblioteca .

scroll top