Java n'a pas réellement de primitives non signées.
La valeur 127 est en réalité représentée par '01111111' le premier bit étant le signe (0 est positif). Un octet non signé serait capable de contenir les valeurs 0 à 255, mais 127 est le maximum pour un octet signé.
Depuis un octet a 8 bits, et le signé en consomme un pour tenir le signe. Donc, si vous voulez représenter des valeurs supérieures à 127, vous devez utiliser un type plus grand qui a un plus grand nombre de bits. Le type supérieur a également un bit réservé pour le signe, mais il a au moins 8 bits utilisés pour les valeurs réelles, donc vous pouvez représenter la valeur 255.
Cela étant dit, vous devriez probablement éviter d'utiliser octet et court car il sont des problèmes avec eux. Vous remarquerez que je jette le résultat à court, puisque les opérateurs retournent réellement int. Vous devriez juste coller à int et long en java car ils sont mieux mis en œuvre. Edit: l'opérateur AND le rend non signé puisque le bit de signe est le premier bit du short, et vous copiez les 8 bits contenant la valeur de l'octet sur les 8 derniers bits du short. Donc, si vous avez un nombre négatif, le premier bit qui est 1 (c'est-à-dire négatif) devient réellement une partie de la valeur. Et le short sera toujours positif puisque son bit de signe est à deux haut d'une puissance de deux pour être affecté par le short.
byte: 10101101
||||||| <- actual value
short: 0000000010101101
||||||||||||||| <- actual value
Edit 2: Prenez note cependant que, puisque les valeurs négatives utilisent two's complement representation la valeur pourrait ne pas être ce que vous attendez. toutes les valeurs positives restent les mêmes.
Mais -128 = 0x10000000 deviendra 128
-127 = 0x10000001 deviendra 129
et ainsi de suite jusqu'à -1 = 0x11111111 qui deviendra 255
Aucun lien pour les problèmes sur les octets et les courts? J'ai utilisé octet de temps en temps, mais jamais vraiment utilisé court. –
@DeanJ: Je pense que le problème est la performance car vous avez besoin de plus de conversions car de nombreuses opérations renvoient int. – Cloudanger
Le premier exemple illustre le point: http: //blog.mpathirage.com/2010/06/27/java-puzzlers-phantom-référence-menace-attaque-du-clone-vengeance-du-shift/Si vous utilisez un opérateur sur le court comme + ou - il se transforme en un int et qui peut causer des problèmes lors de l'appel de méthodes surchargées. –