1. Наименьший единичный бит в компьютерной двоичной системе.
В компьютерной двоичной системе: бит (бит): наименьшая единица хранения данных. сокращенно
b
, также известные как биты (bit
), каждая двоичная цифра 0 или 1 является битом (bit
), где каждый8bit = 1 byte
(байт);
Давайте рассмотрим типы данных в Java, такие какint数据类型 = 4个byte(字节)
,а также1 byte(字节) = 8 bit(位)
; как мы часто говоримint = 32位
(Проще говоря, биты используются в качестве единиц хранения данных в двоичной системе). следующим образом
2. Знаковые и беззнаковые числа
Числа со знаком и числа без знака просто соответствуют положительным числам и отрицательным числам соответственно.В двоичной системе биты используются в качестве единиц хранения данных.Старший бит (первый бит) является битом знака, бит знака для положительных чисел равен «0», а бит знака для отрицательных чисел равен «1».
пример:
Предположениеint number = 1
, то число будет представлено в компьютерной системе следующим образом:
00000000 00000000 00000000 00000001
То же самое можно получить,number = -1
представляется в двоичном виде следующим образом:
10000000 00000000 00000000 00000001
Примечание: старший бит (первый бит) является битом знака, поскольку числовое значение 1 является положительным числом, поэтому старший бит равен 0;
3. Двоичный исходный код, обратный код, дополнительный код
исходный кодИсходным кодом является машинный номер, представляющий собой двоичное число с добавленным битом знака (поскольку значение бывает положительным и отрицательным), бит знака положительных чисел равен 0, а бит знака отрицательных чисел равен 1.
дополнениеРезультат умножения и деления исходного кода со знаковым битом правильный, но есть проблема со сложением и вычитанием, например: выражено в десятичном виде:1 + (-1) = 0
, но в двоичном формате:
00000001 + 10000001 = 10000010,
Преобразование результата в десятичное число равно -2. Поэтому на основе исходного кода для решения этой проблемы был придуман обратный код.
дополнятьХотя появление дополнительного кода и решает проблему сложения и вычитания положительных и отрицательных чисел, оно заставляет число 0 иметь две «формы»: «0» и «-0», но это нелогично, должна быть только одна 0 , поэтому есть дополнение.
Для подписанных номеров:
1. Исходный код, обратный код и дополнительный код положительных чисел совпадают; 2. Обратный код отрицательного числа = знаковый бит его исходного кода остается неизменным, а остальные биты инвертируются (инверсия означает: 0 заменяется на 1, 1 заменяется на 0); 3. Дополнение отрицательного числа = его дополнение +1; 4. Дополнение и дополнение 0 равны 0;【обращать внимание】 1. Когда компьютерные операции выполняются, они выполняются в дополнении. 2. Чтобы преобразовать двоичный код в десятичный, для преобразования необходимо использовать исходный двоичный код.
пример:
Давайте воспользуемся «числом со знаком», чтобы смоделировать его работу на компьютере.
(1) Сложение положительных чисел:
Например: 1+1, операция в компьютере выглядит следующим образом:
Исходный код 1:
00000000 00000000 00000000 00000001
Поскольку «исходный код, обратный код и дополнительный код положительных чисел одинаковы», дополнение 1 = исходный код 1, поэтому дополнение 1 + дополнение 1 равно:
00000000 00000000 00000000 00000001 + 00000000 00000000 00000000 00000001
=
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000010 (в десятичном виде) = 2
(2) Вычтите положительные числа:
Например: 1 - 2, операция в компьютере выглядит следующим образом:
Операция вычитания в компьютере фактически выполняется как операция сложения, поэтому 1 - 2 = 1 + (-2)
Шаг 1: Узнайте дополнительный код 1 (поскольку исходный код, обратный код и дополнительный код положительных чисел одинаковы, поэтому мы можем напрямую получить дополнительный код через исходный код):
1 дополнение:
00000000 00000000 00000000 00000001
Шаг 2: Узнайте исходный код -2:
Исходный код -2:
10000000 00000000 00000000 00000010
Шаг 3: Найдите дополнение -2:
-2 дополнение:
11111111 11111111 11111111 11111101
Шаг 3: Найдите дополнение -2:
-2 дополнение:
11111111 11111111 11111111 11111110
Шаг 4: Добавьте дополнение 1 к дополнению -2:
00000000 00000000 00000000 00000001 + 11111111 11111111 11111111 11111110
=
11111111 11111111 11111111 11111111
Шаг 5: Преобразуйте дополнение результата вычисления в исходный код и сделайте наоборот (если вы хотите преобразовать двоичный код в десятичный, вы должны получить исходный двоичный код)
Дополнение: 11111111 11111111 11111111 11111111
=
Обратный код: 11111111 11111111 11111111 11111110
=
Исходный код: 10000000 00000000 00000000 00000001
Шаг 6: Преобразование исходного двоичного кода результата расчета в десятичный
Исходный двоичный код: 10000000 00000000 00000000 00000001 = 1*2^0 = -1
4. Размышление: почему диапазон значений byte в java составляет -128~127
В java байт занимает один байт, то есть 8 бит (бит), из которых старший бит является битом знака, а остальные 7 бит используются для представления значения.Если бит знака равен 0, он представляется как положительное число и диапазон 00000000~01111111 (дополнительная кодовая форма), то есть 0-127 в десятичном формате.Если бит знака равен 1, он выражается как отрицательное число и диапазон 10000000~11111111 форма дополнения), -128~-1, 11111111 преобразуется в исходный код 10000001, то есть -1. В дополнительном коде, чтобы избежать существования "-0", 10000000 указывается как -128, поэтому объясняется, почему диапазон значений байта составляет -128~127.
5. > и >>> в Java
Прежде всего, > и >>> являются побитовыми операторами в java и работают с двоичными данными. В дополнение к ним есть &, |, ^, ~, несколько битовых операторов. Независимо от того, на какой основе основано начальное значение, оно будет преобразовано в двоичный код для обработки битов. Здесь мы в основном объясняем > и >>> в Java.
Примечание: для следующих типов данных по умолчанию используется byte как 8 бит.При сдвиге влево, независимо от того, положительный он или отрицательный, младшие биты заполняются 0.
Положительные числа: r = 20
Дополнение до двойки 20: 0001 0100
После перемещения на две позиции влево: 0101 0000
Результат: r = 80
Отрицательные числа: r = -20
Исходный двоичный код -20: 1001 0100
Дополнение до единицы -20: 1110 1011
Дополнение до двойки -20: 1110 1100
Дополнение до двух со сдвигом влево: 1011 0000
обратный код: 1010 1111
Исходный код: 1101 0000
Результат: r = -80
‘>>’ означает сдвиг вправо, если число положительное, старший разряд заполняется 0, если отрицательный, старший разряд заполняется 1;
Примечание. Для следующих типов данных по умолчанию используется 8-битный байт.
Положительные числа: r = 20 >> 2
Дополнение до двойки 20: 0001 0100
После перемещения на две позиции вправо: 0000 0101
Результат: r = 5
Отрицательные числа: r = -20 >> 2
Исходный двоичный код -20: 1001 0100
Дополнение до единицы -20: 1110 1011
Дополнение до двойки -20: 1110 1100
Дополнение до двух после сдвига вправо: 1111 1011
Дополнение : 1111 1010
Исходный код: 1000 0101
Результат: r = -5
' >>> ' означает сдвиг вправо без знака, также называемый логическим сдвигом вправо, то есть, если число положительное, старшие биты заполняются 0, а если число отрицательное, старшие биты также заполняются с 0 после сдвига вправо
Примечание. Следующие типы данных по умолчанию имеют значение int 32 бита.
Положительные числа: r = 20 >>> 2
Результат такой же, как r = 20 >> 2;
Отрицательные числа: r = -20 >>> 2
-20 исходный код: 10000000 00000000 00000000 00010100
Дополнение : 11111111 11111111 11111111 11101011
Дополнение : 11111111 11111111 11111111 11101100
Вправо: 00111111 11111111 11111111 11111011
результат: г = 1073741819
Наконец, если есть какие-либо недостатки или неточности, добро пожаловать на исправления и критику, большое спасибо!
Приглашаю всех обратить внимание на мою официальную учетную запись, там есть некоторые учебные материалы по Java и большая волна электронных книг по Java, таких как всесторонняя виртуальная машина Java г-на Чжоу Чжимина, идеи программирования Java, тома основных технологий, большой разговор о дизайне. паттерны, борьба с параллельным программированием на Java... .. Это все библия Java, не говоря уже о том, чтобы садиться в машину Tomcat, поехали! Самое главное — вместе обсуждать технологии, тосковать по технологиям, заниматься технологиями, а когда они согласованы, это друг по горшку…
Ссылаться на:woo woo woo.cn blog on.com/summer data/… блог woo woo woo.cn на.com/blow clean…