Dúvida sobre Var's Inteiras e Ponto Flutuante

19 respostas
dcbasso

Pessoal gostaria de saber se estas variaveis no java são sinalizadas ou não:

int, long, short, byte, float, double… estou precisando muito muito trabalhar com estas variaveis porém elas não podem ser sinalizadas…

Agradeço a atenção e ajuda de todos!

19 Respostas

Rafael_Nunes

O que você quer dizer com ‘sinalizada’?

dcbasso

unsigned/signed ou seja:

unsigned: Aceita somente valores positivos
signed: aceita valores positivos e negativos

T

O único tipo "unsigned" no Java é o char, que é equivalente ao "unsigned short" (2 bytes) do C/C++.
Todos os outros tipos, incluindo byte, são "signed".

De qualquer maneira, 99% do tempo você não se precisa preocupar com isso. O restante 1% pode ser resolvido assim:

a) Para converter um byte para int ou long, de forma que ele se comporte como um "unsigned byte", você tem de fazer um "and" com o valor 0xFF:

byte ccedilha = (byte) 0x80;
int ccedilhaInt = ccedilha & 0xFF; // vai receber o valor 0x80

b) Para deslocar bits para a direita, como se o número fosse "unsigned" (ou seja, o bit mais significativo não é copiado), use o operador ">>>". Exemplo:

int java = 0xCAFE; // em bits, 1100.1010.1111.1110
int java2 = java >>> 1; // vai dar 657F, ou em bits 0110.0101.0111.1111
Rafael_Nunes

São signeds, pois aceitam valores positivos e negativos.

Por exemplo uma variável do tipo byte tem 8 bits, e o range vai de -128 a 127. Um short tem 16 bits e o range compreende de -32768 a +32767. E assim por diante dom int(32 bits), long(64bits), float(ponto flutuante de 32 bits) e double(ponto flutuante de 64 bits)

felipealbuquerque

dcbasso:
unsigned/signed ou seja:

unsigned: Aceita somente valores positivos
signed: aceita valores positivos e negativos

Elas são sinalizadas. Você pode, como opção, utilizar o Math.abs(). Exemplo:

int number = -44557;
		
int positiveNumber = Math.abs(number);
		
System.out.println(positiveNumber);

// resultado: 44557
T

Eu ainda acho que o Gosling deveria ter incluído tipos “unsigned” no Java, assim como existem esses tipos em C/C++ (é claro) e em Modula-3, uma linguagem irmã do Pascal (onde o tipo é chamado de “cardinal”).

O Anders Hejslberg (um dos designers do C#, e é o fulano que criou o Delphi, o Borland C++, e o J++) incluiu tipos unsigned no C#, porque sabe que certas coisas é difícil de fazer direito se você não tiver os tipos “unsigned”.

dcbasso

thingol:
O único tipo "unsigned" no Java é o char, que é equivalente ao "unsigned short" (2 bytes) do C/C++.
Todos os outros tipos, incluindo byte, são "signed".

De qualquer maneira, 99% do tempo você não se precisa preocupar com isso. O restante 1% pode ser resolvido assim:

a) Para converter um byte para int ou long, de forma que ele se comporte como um "unsigned byte", você tem de fazer um "and" com o valor 0xFF:

byte ccedilha = (byte) 0x80;
int ccedilhaInt = ccedilha & 0xFF; // vai receber o valor 0x80

b) Para deslocar bits para a direita, como se o número fosse "unsigned" (ou seja, o bit mais significativo não é copiado), use o operador ">>>". Exemplo:

int java = 0xCAFE; // em bits, 1100.1010.1111.1110 int java2 = java >>> 1; // vai dar 657F, ou em bits 0110.0101.0111.1111

A thingol, boa idéia… estou trabalhando com dados e é extremamente necessário, extremamente mesmoooo que seja unsigned, agora que sei que todas são signed falei o bitwise mesmo :S:S:S

abraçossss

rodrigoallemand

O byte eu naõ tinha pensado… mas, para todos os efeitos, não há unsigned variables em Java…
PS: Ficou legal essa mescla de inglês e português…

rodrigoallemand

thingol:
O Anders Hejslberg (um dos designers do C#, e é o fulano que criou o Delphi, o Borland C++, e o J++) incluiu tipos unsigned no C#, porque sabe que certas coisas é difícil de fazer direito se você não tiver os tipos “unsigned”.

Tirando o range de numeros que pode aumentar, eu não vejo uma usabilidade em signed variables… pelo menos eu nunca senti…

rodrigoallemand

Seguinte thingol… eu consigo fazer isso…

byte menosUm = -1; //OK byte menosDez = -10; //OK byte menosMil = -1000 //NOK

Isso quer dizer que eu consigo ir de -254 a 254 (não lembro os valores certos), correto?!?

T

Rodrigo, o byte vai de -128 a +127. (Isso é difícil de explicar para quem já usou C/C++, onde um unsigned char vai de 0 até 255. )

rodrigoallemand

Esquece tudo… confundi geral!!! Desculpe-me!

T

Não é para se desculpar. Quem é que tem de ficar lembrando esses números de cor? Só falta eu ter que decorar que o long vai de - 9.223.372.036.854.775.808 até +9.223.372.036.854.775.807. É claro que não é para fazer isso.

felipealbuquerque

Pessoal, fiquei curioso.

Vocês poderiam me dar um exemplo onde o uso de unsigned variables é indispensável (ou quase)?

Grato! :wink:

rodrigoallemand

thingol:
Não é para se desculpar. Quem é que tem de ficar lembrando esses números de cor? Só falta eu ter que decorar que o long vai de - 9.223.372.036.854.775.808 até +9.223.372.036.854.775.807. É claro que não é para fazer isso.

Meu erro naõ foi de numeros, e sim que vc falou do char ser unsigned e eu colocar o código do byte…

sergiotaborda

thingol:
Eu ainda acho que o Gosling deveria ter incluído tipos “unsigned” no Java, assim como existem esses tipos em C/C++ (é claro) e em Modula-3, uma linguagem irmã do Pascal (onde o tipo é chamado de “cardinal”).

O Anders Hejslberg (um dos designers do C#, e é o fulano que criou o Delphi, o Borland C++, e o J++) incluiu tipos unsigned no C#, porque sabe que certas coisas é difícil de fazer direito se você não tiver os tipos “unsigned”.

Tb fiquei curioso para que “tipo de coisa” é necessário o unsigned… O java tem um monte de bibliotecas que fazem as mais variadas coisas e fazem tudo isso sem unsigned…

dcbasso

sergiotaborda:
thingol:
Eu ainda acho que o Gosling deveria ter incluído tipos “unsigned” no Java, assim como existem esses tipos em C/C++ (é claro) e em Modula-3, uma linguagem irmã do Pascal (onde o tipo é chamado de “cardinal”).

O Anders Hejslberg (um dos designers do C#, e é o fulano que criou o Delphi, o Borland C++, e o J++) incluiu tipos unsigned no C#, porque sabe que certas coisas é difícil de fazer direito se você não tiver os tipos “unsigned”.

Tb fiquei curioso para que “tipo de coisa” é necessário o unsigned… O java tem um monte de bibliotecas que fazem as mais variadas coisas e fazem tudo isso sem unsigned…

a questão não é biliotecas, a questão é que eu precisava retirar os bits significativos da var para fazer uma criptografica, assim sendo precisava de um var UNSIGNED, então descobri que o java não tem isso e o jeito e mexer nos bits com bitwise!
hehe entendeu? =]
agora to susse, vou ver se vai dar tudo certo esta semana!

abraços

dcbasso

felipealbuquerque:
Pessoal, fiquei curioso.

Vocês poderiam me dar um exemplo onde o uso de unsigned variables é indispensável (ou quase)?

Grato! :wink:

Tem uma classe para salvar dados em um arquivo que ele pega exatamente o valor literal de uma var… quando você salvar um valor int por exemplo ele salvar até os bits significativos (que determina se é um valor positivo ou negativo)… como não me tem como assumir nada negativo consigo economizar algum espaço ao salvar o arquivo, melhorar a leitura do mesmo…

Bem básicamente não muitas funções que utilizem unsigned… mas de vez em quando é necessário… é raro!! é coisa de “escova bit” huauhahuauhahua, bricadeira, mas quase lá!

felipealbuquerque

Entendi, cara!

Obrigado pela informação!

Criado 30 de novembro de 2007
Ultima resposta 3 de dez. de 2007
Respostas 19
Participantes 6