Как представлены целые числа в .NET?
От: PaulMinelly  
Дата: 16.05.08 01:17
Оценка:
Как узнать как представлены целые отрицательные числа в .NET в двоичном виде?

Есть три возможных варианта (возьмем для примера знаковый байт):
-1: 11111111
-1: 10000000
и
-1: 10000001 (тогда появляется так называемый минус ноль: 10000000, но тогда не получается диапазон от -128 до 127)
Сам склоняюсь к первому варианту, хотя во многой теоритической литературе (оторванной от NET) написано что они должны быть представлены как третий вариант и везде красиво делаются операции сложения, вычитания на этом, но как я понимаю в NET все представлено в первом варианте и как тут тогда делать разные операции, если вся теоритическая литература тогда идет через з@д.

Видимо NET где-то "в уме" приводит числа к третьему виду перед манипуляциями? Или нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как представлены целые числа в .NET?
От: Ziaw Россия  
Дата: 16.05.08 03:38
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Как узнать как представлены целые отрицательные числа в .NET в двоичном виде?


   int i = -1;
   Console.WriteLine("{0:X}", i);

FFFFFFFF, первый вариант.

PM>Видимо NET где-то "в уме" приводит числа к третьему виду перед манипуляциями? Или нет?

нет.
Re: Как представлены целые числа в .NET?
От: Ziaw Россия  
Дата: 16.05.08 03:44
Оценка: +1
Здравствуйте, PaulMinelly, Вы писали:

PM>Есть три возможных варианта (возьмем для примера знаковый байт):

PM>-1: 11111111
PM>-1: 10000000
PM>и
PM>-1: 10000001 (тогда появляется так называемый минус ноль: 10000000, но тогда не получается диапазон от -128 до 127)
PM>Сам склоняюсь к первому варианту, хотя во многой теоритической литературе (оторванной от NET) написано что они должны быть представлены как третий вариант и везде красиво делаются операции сложения, вычитания на этом, но как я понимаю в NET все представлено в первом варианте и как тут тогда делать разные операции, если вся теоритическая литература тогда идет через з@д.

Вы какую литературу читали? Не вижу ничего красивого во 2 и 3 вариантах, банальное сложение с 1 дает -2. Вобщем правильной дорогой у вас такая литература идет.
Re: Как представлены целые числа в .NET?
От: _d_m_  
Дата: 16.05.08 03:54
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Как узнать как представлены целые отрицательные числа в .NET в двоичном виде?


PM>Есть три возможных варианта (возьмем для примера знаковый байт):

PM>-1: 11111111
PM>-1: 10000000

Ага, только так:

11111111
00000001

PM>Видимо NET где-то "в уме" приводит числа к третьему виду перед манипуляциями? Или нет?


На уя? 11111111 + 00000001 = 0

Это родной формат процессоров x86 так что в NET как и везде не стали изобретать какой-то свой тормозной велосипед.
Re[2]: Как представлены целые числа в .NET?
От: _d_m_  
Дата: 16.05.08 03:56
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, PaulMinelly, Вы писали:


PM>>Как узнать как представлены целые отрицательные числа в .NET в двоичном виде?


PM>>Есть три возможных варианта (возьмем для примера знаковый байт):

PM>>-1: 11111111
PM>>-1: 10000000

___>Ага, только так:


___>11111111

___>00000001

Т.е.
-1 : 11111111
1 : 00000001
Re: Как представлены целые числа в .NET?
От: Pro100Oleh Украина  
Дата: 16.05.08 10:50
Оценка:
Поиграйтесь с этим:

    [StructLayout(LayoutKind.Explicit, Size = 4)]
    public struct IntValue
    {
        [FieldOffset(0)]
        public byte B0;
        [FieldOffset(1)]
        public byte B1;
        [FieldOffset(2)]
        public byte B2;
        [FieldOffset(3)]
        public byte B3;
        public int Value;
    }
Pro
Re: Как представлены целые числа в .NET?
От: Othello  
Дата: 16.05.08 15:06
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>Как узнать как представлены целые отрицательные числа в .NET в двоичном виде?


зависит от того — под какую платформу у вас .Net Runtime машина — и от её реализации — в нормальных условиях — вас это не должно волновать. Можете написать свой Runtime и хранить как вам нравится. Всю логику лучше делать чере обёртки — там есть кажется BinaryWriter и BinaryReader, Formatter и тп.


http://msdn.microsoft.com/en-us/library/exx3b86w(VS.71).aspx — сами типы

http://msdn.microsoft.com/en-us/library/khy08726(VS.71).aspx ситуация когда переходит за пределы возможных значений — должны приводить к исключениям
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как представлены целые числа в .NET?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.05.08 22:39
Оценка: +1
Здравствуйте, PaulMinelly, Вы писали:

PM>Есть три возможных варианта (возьмем для примера знаковый байт):

PM>-1: 11111111
PM>-1: 10000000
PM>и
PM>-1: 10000001 (тогда появляется так называемый минус ноль: 10000000, но тогда не получается диапазон от -128 до 127)
PM>Сам склоняюсь к первому варианту, хотя во многой теоритической литературе (оторванной от NET) написано что они должны быть представлены как третий вариант и везде красиво делаются операции сложения, вычитания на этом

Что это у тебя за литература такая странная? Дополнительный код — читать до просветления.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1082 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[2]: Как представлены целые числа в .NET?
От: PaulMinelly  
Дата: 21.05.08 13:02
Оценка:
PM>>Есть три возможных варианта (возьмем для примера знаковый байт):
PM>>-1: 11111111
PM>>-1: 10000000
PM>>и
PM>>-1: 10000001 (тогда появляется так называемый минус ноль: 10000000, но тогда не получается диапазон от -128 до 127)
PM>>Сам склоняюсь к первому варианту, хотя во многой теоритической литературе (оторванной от NET) написано что они должны быть представлены как третий вариант и везде красиво делаются операции сложения, вычитания на этом

AVK>Что это у тебя за литература такая странная? Дополнительный код — читать до просветления.


Спасибо! Пара вопросов: Дополнительным кодом представляют только отрицательные числа? И почему он дополнительный, что он дополняет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Как представлены целые числа в .NET?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 21.05.08 13:27
Оценка: +1
Здравствуйте, PaulMinelly, Вы писали:

AVK>>Что это у тебя за литература такая странная? Дополнительный код — читать до просветления.


PM>Спасибо! Пара вопросов: Дополнительным кодом представляют только отрицательные числа? И почему он дополнительный, что он дополняет?


Так ты прочитал указанную статью или нет?
Re[4]: Как представлены целые числа в .NET?
От: PaulMinelly  
Дата: 21.05.08 14:30
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, PaulMinelly, Вы писали:


AVK>>>Что это у тебя за литература такая странная? Дополнительный код — читать до просветления.


PM>>Спасибо! Пара вопросов: Дополнительным кодом представляют только отрицательные числа? И почему он дополнительный, что он дополняет?


N>Так ты прочитал указанную статью или нет?


Прочитал. Отрицателные числа написано представлены дополнительным кодом. Не очень понятно что он дополняет, если он просто напросто самостоятельно представляет отрицательные числа безо всяких дополнений.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Как представлены целые числа в .NET?
От: _d_m_  
Дата: 22.05.08 02:44
Оценка:
Здравствуйте, PaulMinelly, Вы писали:

PM>>>Спасибо! Пара вопросов: Дополнительным кодом представляют только отрицательные числа? И почему он дополнительный, что он дополняет?


N>>Так ты прочитал указанную статью или нет?


PM>Прочитал. Отрицателные числа написано представлены дополнительным кодом. Не очень понятно что он дополняет, если он просто напросто самостоятельно представляет отрицательные числа безо всяких дополнений.


Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы.


или другими словами: дополняем единицей.
Re[6]: Как представлены целые числа в .NET?
От: Mumitroller Беларусь  
Дата: 22.05.08 06:33
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>

___>Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы.


___>или другими словами: дополняем единицей.


Дополнительным называется потому, что отрицательное число является дополнением равного по модулю положительного числа до машинного нуля. Таким образом сложение чисел в дополнительном коде не требует доплнительных телодвижений для учета знаков чисел.

Мумитроллер
Re[6]: Как представлены целые числа в .NET?
От: Овощ http://www.google.com
Дата: 22.05.08 06:39
Оценка:
PM>>Прочитал. Отрицателные числа написано представлены дополнительным кодом. Не очень понятно что он дополняет, если он просто напросто самостоятельно представляет отрицательные числа безо всяких дополнений.

"Дополнительный код" в старых советских учебниках по теории автоматов назывался "дополнением до двух".
В той же статье в Википедии по дополнительному коду так и написано: "Дополнительный код (англ. Two's complement)".
Вот и соответствующая статья: Two's_complement.
Почему именно "до двух"? По видимому из самого определения этого "дополнения до двух" (его формулы): "The two's complement of a binary number is defined as the value obtained by subtracting the number from a large power of two (specifically, from 2^N for an N-bit two's complement)."
Т.е. в двоичном представлении само число + его дополнение до двух = степень двойки (2^N).
А то, что этот код стал повсеместно использоваться в компьютерной арифметике для представления отрицательных чисел, было обусловлено удобством проектирования логических схем — все арифметика делалась на сумматорах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.