Страница: 1 |
Вопрос: Зачем в signed бит для знака? | Добавлено: 04.10.11 13:02 |
Автор вопроса: ![]() |
Почему в signed переменных используют бит для хранения знака? ведь без него диапазон данных по ширине тот же и знак определяться может не в качестве бита в памяти, а как тип данных(т.е, например, если тип данных signed то число отрицательное то, которое меньше половины диапазона) |
Ответы | Всего ответов: 10 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #1 | Добавлено: 04.10.11 17:50 |
хороший вопрос. дополнительный бит увеличит диапазон в два раза, если я ничего не путаю. тоже хотелось бы узнать ответ |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 04.10.11 19:21 |
что-то я не понял вопроса. диапазоны чисел у знаковых и беззнаковых переменных разные, но (не знаю как грамотно сказать) ширина диапазона одинаковая.
2битное беззнаковое: 0, 1, 2, 3 знаковое: 0, 1, -1, -2 как вы собираетесь увеличить диапазон вдвое? больше 4х чисел не влезет |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #3 | Добавлено: 04.10.11 19:33 |
хм. а ведь и правда |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 348680795 Вопросов: 12 Ответов: 33 |
Профиль | Цитата | #4 | Добавлено: 05.10.11 08:12 |
To Winand
диапазоны чисел у знаковых и беззнаковых переменных разные я может быть тоже не грамотно выражаюсь, поправьте если что, под диапазоном я имел ввиду именно ширину диапазона To AgentFire
дополнительный бит увеличит диапазон в два раза, если я ничего не путаю да, но фишка в том со знаковым битом диапазон будет тот же, а для числа (со знаком или без) уже нужно будет как раз на один бит меньше. Но почему, если типы данных никогда не хранились в оперативной памяти, тут решили как-то отделить signed типы и хранить там этот знак? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #5 | Добавлено: 05.10.11 10:04 |
да не хранится он там, получает |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 348680795 Вопросов: 12 Ответов: 33 |
Профиль | Цитата | #6 | Добавлено: 05.10.11 12:58 |
Вот доказательство:
создай windowsForms проект добавь текст бокс и назови его t1 и вставь код Public Class Form1
как видно из примера крайний правый бит отвечает за знак неужели никто не знает ответ? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #7 | Добавлено: 05.10.11 19:43 |
он не отвечает за него. там форматирование немного другое. перечитай второй пост и подумай. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #8 | Добавлено: 05.10.11 19:48 |
Winand пишет:
что-то я не понял вопроса. диапазоны чисел у знаковых и беззнаковых переменных разные, но (не знаю как грамотно сказать) ширина диапазона одинаковая. 2битное беззнаковое: 0, 1, 2, 3 знаковое: 0, 1, -1, -2 как вы собираетесь увеличить диапазон вдвое? больше 4х чисел не влезет у двух бит есть следующие 4 комбинации. 00, 01, 10, 11. беззнаковое воспринимает эти комбинации бит как 0, 1, 2, 3 соответственно. а знаковое как 0, 1, -2, -1 (вроде как тоже соответственно) |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #9 | Добавлено: 06.10.11 08:41 |
Почему в signed переменных используют бит для хранения знака? ведь без него диапазон данных по ширине тот же и знак определяться может не в качестве бита в памяти, а как тип данных(т.е, например, если тип данных signed то число отрицательное то, которое меньше половины диапазона)
Так и есть. Только число считает отрицательным, если оно больше половины диапазона. AgentFire, это не форматирование другое, а дополнительный код http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0) Если последний бит равен 0, то число является положительным и с ним можно работать. Если последний бит равен 1, то число является отрицательным, но, чтоб понять что там на самом деле лежит (модуль числа), нужно применить определенный набор знаний матанализа (а именно операцию NOT к каждому биту и прибавить 1 к результату). Это определенным образом позволяет выполнять операцию вычитания с помощью тех же сумматоров, которыми выполняется операция сложения. Благодаря этому экономится половина полимеров при производстве процессоров. Побочный эфект состоит в том, что отрицательных чисел больше чем положительных, и можно словить переполнение, просто поменяв знак у числа или получив его модуль. PS Гарантирую это как специалист, прослушавший курс "Схемотехника" несколько лет назад. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 06.10.11 23:36 |
эх схемота. микросхемы серии к155, которые в конце 200Х надо суметь найти, чтобы что-то спаять![]() |
Страница: 1 |
|