2017-02-16 13 views
-5

В Javaпобитовое Операция вычисления Detail

byte a = -40; 
System.out.println(a); 
System.out.println(a&0xff); 

Выход:

-40 
216 

Может кто-нибудь объяснить операции подробно?

+2

Мой хрустальный шар сломан сегодня. Что вас смущает? – 4castle

+2

Хорошее домашнее задание у вас там. – tnw

+0

С вашей точки зрения, на самом деле это простой вопрос. Но я думаю, вы не должны смеяться надо мной! @tnw – cole

ответ

-1

Вот программа, которую вы можете попробовать, чтобы увидеть, как немного мудрым и работать

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Test 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     byte a = -40;   
     System.out.println(a); 
     System.out.println(Integer.toBinaryString(a)); 
     System.out.println(0xff); 
     System.out.println(Integer.toBinaryString((int)0xff));   
     System.out.println(a&0xff); 
    } 

} 

Объяснение

-40 = 11011000 
0xff = 11111111 
---------------- 
216 = 11011000 
+0

Кто дает отрицательный голос, пожалуйста, объясните, почему вы даете голос? –

-1

Я странно побитовый operator.Now я получаю it.Here моего ответа:

В Java один байты составляет 8 бит, поэтому

-40 -> 1101 1000 

0xff Как типа int 32 бита, поэтому деталь является:

1111 1111 1111 1111 1111 1111 1101 1000 
AND 
    0000 0000 0000 0000 0000 0000 1111 1111 
= 
    0000 0000 0000 0000 0000 0000 1101 1000 
0

Операция & выполняет "И" операцию на каждый бит аргументов.

побитовое И ведет себя так:

In | In | Out 
0 | 0 | 0 
0 | 1 | 0 
1 | 0 | 0 
1 | 1 | 1 

В основном то, что у вас есть что-то вроде этого:

11011000 (-40) 
11111111 (0xFF or 255) 
11011000 (216) 

В основном все биты сохраняются, потому что они все операции AND 1s. Однако число отличается от того, что отрицательные числа представлены дополнением двух. Это означает, что что-то вроде «-1» можно прочитать как 255. В вашем случае число -40 переинтерпретируется как 216 (что составляет 256-40).