2014-09-24 5 views
-1

Я посмотрел пару способов преобразования двоичного кода в целое число в JAVA. Но я не мог понять, почему это работает?Java Binary to Integer

int res = 0; 
res += 1 << 1; 

Резится, что она равна 2, я знаю, что она сдвигается влево 1 бит и становится 10 в двоичном формате. Но я запутываю, как он преобразуется из двоичного в целое, я хочу знать механизм.

Благодаря

+2

Все на компьютере является двоичным. Когда вы печатаете его на System.out, он преобразует его в базу 10. – ControlAltDel

+1

Нет преобразования, поскольку в Java нет двоичного примитива; 'res' -' int'. – azurefrog

+1

«int» уже имеет 32-разрядное значение, то есть оно уже двоично, и вы не можете его изменить. Любое понятие о том, что это нечто иное, чем двоичное, - это просто сделать вашу жизнь проще. –

ответ

1

Прежде всего, давайте сначала проясним некоторые термины. То, что вы считаете целым числом, на самом деле является числом в base 10 notation, которое в случае Java является natural number, которое представлено с использованием десяти цифр от 0 до 9 (следовательно, базы 10).

В binary notation мы имеем дело с двумя цифрами вместо того, чтобы представлять все натуральные числа. Как двоичные (базовые 2), так и десятичные числа (база 10) являются целыми числами.

Digit сдвига является умножение или деление на основе числа

бит сдвига эффекта вы наблюдали можно легко объяснить с помощью основания 10 числа вы уже знакомы. Представьте, что у вас есть полоса квадратных полей, предварительно заполненная 0 s. В каждом поле вы можете записать цифру от 0 до 9, и предположим, что эти поля называются «bits». Вы пишете номер 7 в эту полосу выравнивается по правой стороне:

0|0|0|0|0|7 

Представьте себе, что вся полоса представляет собой целое число 7 в настоящее время. Какое смещение бит эффективно делает, перемещает эти цифры в этой полосе либо влево, либо вправо, заполняя ранее занятые точки 0 с. Представьте себе, мы переходим нашего 7 влево на одном месте:

0|0|0|0|7|0 

Перенеся число слева мы практически выполнили быстрое умножение на 10 (помните, что это база нашей системы счисления мы здесь мы имеем дело).

Когда вы смещаете это число справа на одно место, вы выполняете деление на 10.

Бит сдвиг есть умножение или деление на 2

То же самое относится и к двоичным числам, доминирующему формату для хранения чисел в компьютерах. Двоичные числа состоят всего из двух цифр: 1 с и 0.

Просто быстрый взгляд на следующую таблице для получения лучшего понимания двоичных чисел:

+-------------------+ 
| Decimal | Binary | 
+---------+---------+ 
| 0000001 | 0000001 | 
| 0000002 | 0000010 | 
| 0000003 | 0000011 | 
| 0000004 | 0000100 | 
| 0000005 | 0000101 | 
| 0000006 | 0000110 | 
| 0000007 | 0000111 | 
| ...  | ...  | 
+---------+---------+ 

Проводит умножения на 2, когда мы перемещаем число в нашей полосе слева, и мы выполняем подразделение на 2, когда мы сдвигаем число вправо. Просто просмотрите таблицу и найдите десятичное число 1. Умножьте его на 2 и посмотрите на двоичное представление. Умножьте это снова на 2 (десятичное число 4) и посмотрите на двоичную нотацию. Двоичная цифра 1 просто перемещается влево по одному из-за умножения на два.

0

res+= 1<<1; можно записать в виде res = res + 1<<1; , если вы берете 1<<1, что означает 1 представлен как 0x00000001 = 00000000 00000000 00000000 00000001 , когда вы делаете правый сдвиг становится 00000000 00000000 00000000 00000010

который 0x00000002 который 2 в десятичное значение