Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Знаковое и безнаковое число  (Прочитано 3800 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Знаковое и безнаковое число
« : 06 Апрель 2012, 23:32:08 »
Как процессор может отличить знаковое или безнаковое число будет записано в памяти?

Axa-Ru

  • Гость
Re: Знаковое и безнаковое число
« Ответ #1 : 06 Апрель 2012, 23:39:39 »
обычно старший бит отвечает за знак.

http://uchebnik1.narod.ru/chislo.html

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #2 : 06 Апрель 2012, 23:42:17 »
обычно старший бит отвечает за знак.

http://uchebnik1.narod.ru/chislo.html
А как отличить это знаковый бит или бит числа?

Axa-Ru

  • Гость
Re: Знаковое и безнаковое число
« Ответ #3 : 06 Апрель 2012, 23:44:44 »
Никак.
Это делает компилятор-интерпретатор и зависит от языка, который используется.
Например:
разрядность процессора равна 8 бит.
Тогда наименьшее отрицательное число будет -127
Наибоьшее положительное +127

Максимальное беззнаковое число 256

При этом

11111111 = 255
11111111 = -127
01111111 = 127
« Последнее редактирование: 06 Апрель 2012, 23:49:13 от Axa-Ru »

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #4 : 07 Апрель 2012, 00:03:31 »
Никак.
Это делает компилятор-интерпретатор и зависит от языка, который используется.
Например:
разрядность процессора равна 8 бит.
Тогда наименьшее отрицательное число будет -127
Наибоьшее положительное +127

Максимальное беззнаковое число 256

При этом

11111111 = 255
11111111 = -127
01111111 = 127


Проблема в том что все в конечном итоге перейдет в исполняемый объектный файл кторый будет и загружен в память. Как там отличить?

Axa-Ru

  • Гость
Re: Знаковое и безнаковое число
« Ответ #5 : 07 Апрель 2012, 00:27:13 »
1. Почему это проблема?
2. В чем заключается проблема?
3. Как вы узнали про эту проблему?
4. Давайте разберем реальную ситуацию. Например выполнение арифметических операций с регистровыми данными в процессоре модели x86. Что конкретно вас смущает и в какой конкретно команде?
« Последнее редактирование: 07 Апрель 2012, 00:31:07 от Axa-Ru »

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #6 : 07 Апрель 2012, 01:25:55 »
Как процессор может отличить знаковое или безнаковое число будет записано в памяти?
Никак.
Процессору это (знаковый/беззнаковый) - без разницы.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #7 : 07 Апрель 2012, 09:02:32 »
Числа представлены в двоичном виде, как число вы будете
интерпретировать в программе (знаковое\беззнаковое) это ваше дело.

Как было сказано старший бит используется для знака.
Если он установлен в 1 -то число отрицательное.
Если число вы интерпритируете как беззнаковое, то
максимальное число может быть в два раза больше.
для 8-ми битного числа беззнакового 0..65535
для знакового -32767..32768

Axa-Ru

  • Гость
Re: Знаковое и безнаковое число
« Ответ #8 : 07 Апрель 2012, 09:14:43 »
для 8-ми битного числа беззнакового 0..65535
для знакового -32767..32768
Gaga

2^8 = 256
2^16 = 65536

ТС, если в самом деле интересуеь этот вопрос, то почитайте про язык ассемблера, например вот здесь: http://www.sbp-program.ru/assembler/sbp-assembler.htm и про кокретную реализацию под конкретный процессор.
« Последнее редактирование: 07 Апрель 2012, 10:16:50 от Axa-Ru »

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #9 : 08 Апрель 2012, 13:25:30 »
Axa-Ru
Вы про нолик забыли, от 0 до 65535 - получается ровно 65536 -
- это два в 16-й степени. Я не один компилятор написал,
и в этих вопросах разобрался; если интересно - можете
посмотреть мой компилятор языка Форт http://forth4.narod.ru/

Axa-Ru

  • Гость
Re: Знаковое и безнаковое число
« Ответ #10 : 08 Апрель 2012, 13:46:38 »
Гага, я не про то с какой с какой цифры начать считать, я про то, что максимальное число которое можно закодировать 8 битами 256 (или 255), а не 65536 (или 65535)

Про Форт - респект. Это дело.
« Последнее редактирование: 08 Апрель 2012, 13:48:26 от Axa-Ru »

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #11 : 08 Апрель 2012, 14:11:07 »
Может кто-нибудь на пальцах объяснить, что вообще делает компилятор. И что такое транслятор?

andrey_p

  • Гость
Re: Знаковое и безнаковое число
« Ответ #12 : 08 Апрель 2012, 14:31:27 »
Может кто-нибудь на пальцах объяснить, что вообще делает компилятор. И что такое транслятор?
Так пойдет?  :coolsmiley:


ЗЫ Википедия знает все!

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #13 : 08 Апрель 2012, 16:30:39 »
Может кто-нибудь на пальцах объяснить, что вообще делает компилятор. И что такое транслятор?

Компилятор и транслятор - суть одно и тоже. Мы пишем программу на каком либо языке
программирования словами. Компилятор переводит программу в исполнимый машинный код
процессора, который его исполняет. И то не всегда. Так с# использует байт-код,
который на этапе исполнения (run-time) так же разворачивается в машинный код.
Есть еще интерпретаторы - которые или непосредственно интерпретируют код
программы исполняя ее, или через текст или через байт-код, вариантов
может быть много разных. Почитайте про gcc, который есть в любой линукс-системе.

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: Знаковое и безнаковое число
« Ответ #14 : 08 Апрель 2012, 17:49:24 »
Если рассматривать сишный компилятор, то сначала вызывает препроцессор, потом полученный код
перегоняет в код на языке ассемблере. А потом уже ассемблер перегоняет в машинный код. Так вот интресно. Если мы возьмем программу написанную на языке Питон или другом более высокоуровневом языке. Не значит ли что мы скомпилируем наш код в код языка более низкого уровня. Потом в код
на языке ассемблера, а потом уже в машинный код?

 

Страница сгенерирована за 0.088 секунд. Запросов: 25.