Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 Max
Max

Care este cel mai bun mod de a lucra în jurul faptului că toți octeții Java sunt semnate?

În Java, nu există un astfel de lucru ca un octet nesemnat.

Dacă lucrați cu un cod de nivel scăzut, ocazional trebuie să lucrați cu octeți care au valori nesemnate mai mari de 128, fapt care determină Java să le interpreteze ca număr negativ din cauza faptului că MSB este folosit pentru semnare.

Care este o modalitate bună de a rezolva asta? (Spunând că nu folosiți Java nu este o opțiune)

58 2008-08-14T14:14:03+00:00 6
Programare
java
byte
unsigned
signed
Comentarii la întrebare (0)
Nick Berardi
14 august 2008 в 6:17
2008-08-14T18:17:48+00:00
Mai mult
Sursă
Editează
#11092

Cred că ai putea folosi doar un scurt pentru a le stoca. Nu foarte eficientă, dar cu adevărat singura opțiune în afară de un efort herculean pe care l-am văzut.

0
0
Comentarii (0)
stimms
14 august 2008 в 6:22
2008-08-14T18:22:24+00:00
Mai mult
Sursă
Editează
#11098

Probabil că cel mai bun pariu este să utilizați un integer mai degrabă decât un octet. Are spațiu pentru a permite numerelor mai mari de 128, fără a avea sarcina de a crea un obiect special care să înlocuiască octetul.

Acest lucru este sugerat și de oamenii mai deștepți decât mine (toată lumea)

  • http://www.darksleep.com/player/JavaAndUnsignedTypes.html
  • http://www.jguru.com/faq/view.jsp ? EID = 13647
0
0
Comentarii (0)
pauldoo
14 august 2008 в 6:24
2008-08-14T18:24:50+00:00
Mai mult
Sursă
Editează
#11101

Când citiți o singură valoare din matrice copiați-o în ceva de tipul scurt sau int și convertiți manual numărul negativ în valoarea pozitivă ar trebui să fie.

byte[] foobar = ..;
int value = foobar[10];
if (value < 0) value += 256//Patch up the 'falsely' negative value

Puteți face o conversie similară atunci când scrieți în matrice.

0
0
Comentarii (0)
martinatime
19 august 2008 в 7:39
2008-08-19T07:39:43+00:00
Mai mult
Sursă
Editează
#15657

Cel mai bun mod de a face manipularea biților/bytes nesemnate este prin utilizarea int s. Chiar dacă sunt semnați, ei au destule biți de rezervă (32 total) pentru a trata ca un octet nesemnat. De asemenea, toți operatorii matematici vor converti numere de precizie fixe mai mici la int . Exemplu:

short a = 1s;
short b = 2s;
int c = a + b;//the result is up-converted
short small = (short)c;//must cast to get it back to short

Din acest motiv cel mai bine este să vă lipiți de întreg și să o mascați pentru a obține biții care vă interesează. Exemplu:

int a = 32;
int b = 128;
int foo = (a + b) | 255;

Here is some more info on Java primitive types http://mindprod.com/jgloss/primitive.html

O ultimă notă trivială, există un număr de precizie nesemnificat fix în Java. Acesta este primitivul char .

0
0
Comentarii (0)
izb
19 august 2008 в 12:03
2008-08-19T12:03:27+00:00
Mai mult
Sursă
Editează
#15874

Utilizarea ints este, în general, mai bună decât folosirea de pantaloni scurți deoarece java utilizează oricum orice valoare pe 32 de biți (chiar și pentru octeți, cu excepția cazului în tablouri), astfel încât utilizarea inturilor va evita conversia inutilă la/de la valori scurte în bytecode.

0
0
Comentarii (0)
ejack
21 august 2008 в 5:17
2008-08-21T05:17:45+00:00
Mai mult
Sursă
Editează
#19186
0
0
Comentarii (0)
octo
19 februarie 2011 в 2:33
2011-02-19T02:33:42+00:00
Mai mult
Sursă
Editează
#5047679

I know this is a very late response, but I came across this thread when trying to do the exact same thing. The issue is simply trying to determine if a Java byte is >127.

Soluția simplă este:

if((val & (byte)0x80) != 0) { ... }

If the real issue is >128 instead, just adding another condition to that if-statement will do the trick.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire