Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Зачем в signed бит для знака? Добавлено: 04.10.11 13:02  

Автор вопроса:  ---Fix--- | ICQ: 348680795 
Почему в signed переменных используют бит для хранения знака? ведь без него диапазон данных по ширине тот же и знак определяться может не в качестве бита в памяти, а как тип данных(т.е, например, если тип данных signed то число отрицательное то, которое меньше половины диапазона)

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 04.10.11 17:50
хороший вопрос. дополнительный бит увеличит диапазон в два раза, если я ничего не путаю. тоже хотелось бы узнать ответ

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 04.10.11 19:21
что-то я не понял вопроса. диапазоны чисел у знаковых и беззнаковых переменных разные, но (не знаю как грамотно сказать) ширина диапазона одинаковая.
2битное беззнаковое: 0, 1, 2, 3
знаковое: 0, 1, -1, -2
как вы собираетесь увеличить диапазон вдвое? больше 4х чисел не влезет

Ответить

Номер ответа: 3
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 04.10.11 19:33
хм. а ведь и правда

Ответить

Номер ответа: 4
Автор ответа:
 ---Fix---



ICQ: 348680795 

Вопросов: 12
Ответов: 33
 Профиль | | #4 Добавлено: 05.10.11 08:12
To Winand
 диапазоны чисел у знаковых и беззнаковых переменных разные

я может быть тоже не грамотно выражаюсь, поправьте если что, под диапазоном я имел ввиду именно ширину диапазона
To AgentFire
дополнительный бит увеличит диапазон в два раза, если я ничего не путаю

да, но фишка в том со знаковым битом диапазон будет тот же, а для числа (со знаком или без) уже нужно будет как раз на один бит меньше. Но почему, если типы данных никогда не хранились в оперативной памяти, тут решили как-то отделить signed типы и хранить там этот знак?

Ответить

Номер ответа: 5
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #5 Добавлено: 05.10.11 10:04
да не хранится он там, получает

Ответить

Номер ответа: 6
Автор ответа:
 ---Fix---



ICQ: 348680795 

Вопросов: 12
Ответов: 33
 Профиль | | #6 Добавлено: 05.10.11 12:58
Вот доказательство:
создай windowsForms проект добавь текст бокс и назови его t1
и вставь код
Public Class Form1

  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         t1.Text = "-128 in Sbyte: "
  3.  
  4.         Dim b As SByte() = {Convert.ToSByte(-128)}
  5.         Dim BA As New BitArray(System.BitConverter.GetBytes(b(0)))
  6.         t1.Text &= String.Concat(Convert.ToInt32(BA(0)), Convert.ToInt32(BA(1)), _
  7.                                  Convert.ToInt32(BA(2)), Convert.ToInt32(BA(3)), _
  8.                                  Convert.ToInt32(BA(4)), Convert.ToInt32(BA(5)), _
  9.                                  Convert.ToInt32(BA(6)), Convert.ToInt32(BA(7)))
  10.         b(0) = Convert.ToSByte(127)
  11.         BA = New BitArray(System.BitConverter.GetBytes(b(0)))
  12.         t1.Text &= System.Environment.NewLine & "127 in Sbyte: "
  13.         t1.Text &= String.Concat(Convert.ToInt32(BA(0)), Convert.ToInt32(BA(1)), _
  14.                                  Convert.ToInt32(BA(2)), Convert.ToInt32(BA(3)), _
  15.                                  Convert.ToInt32(BA(4)), Convert.ToInt32(BA(5)), _
  16.                                  Convert.ToInt32(BA(6)), Convert.ToInt32(BA(7)))
  17.     End Sub
  18. End Class


как видно из примера крайний правый бит отвечает за знак
неужели никто не знает ответ?

Ответить

Номер ответа: 7
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #7 Добавлено: 05.10.11 19:43
он не отвечает за него. там форматирование немного другое. перечитай второй пост и подумай.

Ответить

Номер ответа: 8
Автор ответа:
 AgentFire



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
Автор ответа:
 Artyom



Разработчик

Вопросов: 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
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 06.10.11 23:36
эх схемота. микросхемы серии к155, которые в конце 200Х надо суметь найти, чтобы что-то спаять:)) хотя кажется мы представление чисел проходили еще раньше на дискретной математике

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам