Operadores binários

1 - Em java, um char tem um tamanho de 1 byte. Então a String str = “abc” tem o tamanho de 4 bytes (‘a’,‘b’,‘c’,’\0’)?

2 - Nos operadores binários, qual é a diferença entre >> e >>>?

Obrigado,
PSC

[quote=pedrosacosta]1 - Em java, um char tem um tamanho de 1 byte. Então a String str = “abc” tem o tamanho de 4 bytes (‘a’,‘b’,‘c’,’\0’)?
[/quote]

acredito que sim, pelo menos faz sentido :stuck_out_tongue: (melhor deixar essa para outra pessoa responder)

aonde você viu esse operador “>>>”? nunca vi ele, e dei uma pesquisada agora e não achei nada sobre… só conheço o >> e << (deslocamento de bits a direita e esquerda)

1 - Em http://leepoint.net/notes-java/data/expressions/bitops.html (Atenção que o operador <<< dá-me erro no eclipse, por isso não sei se existe. O >>> existe):

Com estes exemplos, o que me imprime é o seguinte:
System.out.println((-24>>>2)); // 1073741818
System.out.println(-24>>2); // -6

Não percebo o que faz o operador >>>.

2 -

Já agora, também não percebo o operador ~.
int a = 5;
System.out.println(~a); // -6

Porque é que ~a não é -5 e é -6?

Não. Isso seria em C ou C++.

No Java, o char é unicode, portanto, ele tem 2 bytes. A classe String não é terminada em /0 e sim indexada. O tamanho de um
String str = “abc”; então será, no mínimo, 10 bytes (4 para as letras, 4 para o inteiro que armazena o tamanho da String).

O operador de >>> vai fazer shift também no bit de sinal. Esse bit então ficará zerado, após a movimentação. No caso do operador de >>, o sinal não é alterado, portanto, se o bit da esquerda contiver o valor 1, ele continuará tendo o valor 1.

Vamos pegar por exemplo o número -24. Em binário, ele será o número:
11111111 11111111 111111111 11101000

O bit em negrito representa o bit de sinal. Se fizermos um shift com >> obteremos:
10111111 11111111 111111111 11110100 //O bit de sinal continua sendo 1, o que indica um número negativo, então esse número é o -12

Se fizermos o shift com >>> obteremos:
01111111 11111111 111111111 11110100 //O bit de sinal agora é 0, portanto agora esse número é algum número bem grande, e positivo: 4294967284

Por que o primeiro número positivo é o 0. Logo, o sexto numero positivo será o 5.
Quando você inverte todos os bits de um número, obtém um número negativo, no caso o sexto. Como não existe o -0, o sexto número negativo será o -6.

Para entender melhor, leia esse texto:

Isso fará com que você entenda também pq fazer o shift com >>> num número negativo resulta num número tão grande.