LINUX.ORG.RU

История изменений

Исправление AKonia, (текущая версия) :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с вовлечением недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение(только в другую сторону) для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25, это более менее представимая в голове интерпретация, в действительности отрицательное число как правило хранится с дополнением до единицы и по сути когда вы просите положить в беззнаковое хранилище отрицательное число a в него кладётся дополненное до единицы вида ~a + 1 или в более простом виде 2^32 - a

Правда это в теории, на практике компилятор в данном случае оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с вовлечением недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25, это более менее представимая в голове интерпретация, в действительности отрицательное число как правило хранится с дополнением до единицы и по сути когда вы просите положить в беззнаковое хранилище отрицательное число a в него кладётся дополненное до единицы вида ~a + 1 или в более простом виде 2^32 - a

Правда это в теории, на практике компилятор в данном случае оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25, это более менее представимая в голове интерпретация, в действительности отрицательное число как правило хранится с дополнением до единицы и по сути когда вы просите положить в беззнаковое хранилище отрицательное число a в него кладётся дополненное до единицы вида ~a + 1 или в более простом виде 2^32 - a

Правда это в теории, на практике компилятор в данном случае оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25, это более менее представимая в голове интерпретация, в действительности отрицательное число как правило хранится с дополнением до единицы и по сути когда вы просите положить в беззнаковое хранилище отрицательное число a в него кладётся дополненное до единицы вида ~a + 1 или в более простом виде 2^32 - a

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25, это более менее представимая в голове интерпретация, в действительности отрицательное число как правило хранится с дополнением до единицы и по сути когда вы просите положить в беззнаковое хранилище отрицательное число a в него кладётся дополненное до единицы вида ~a + 1

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(8-9 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по школьному учебнику информатики(7-8 класс) или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на цифровых вычислительных устройствах, например по учебнику информатики или по Харрисам

Исправление AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли(что равно прибавлению) 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25

Правда это в теории, на практике компилятор оптимизирует код и делает во время компиляции расчёты в более широких типах данных, дабы не было переполнений

В целом действительно стоит почитать про хранение чисел на ПК, например по учебнику информатики или по Харрисам

Исходная версия AKonia, :

когда ты кладёшь в 32-ух битный unsigned int отрицательное число происходит переполнение двоичного числа и кладётся (0 - 50) попробуйте выполнить в двоичном виде - операция побитово выполнится, но как бы с отбрасыванием недоступных битов, т.е. будет выглядеть как будто вы заняли 33-ий бит которого нет и в ячейку будет сохранено число 2^32 - 50, затем прибавляя 75 вы вновь вызываете переполнение для суммы 2^32 - 50 и 75 - по идее вы должны будете перенести 1 бит в 33 бит, но опять же т.к. его нет получится его отбрасывание эквивалентное вычитанию и получится: 2^32 - 50 + 75 - 2^32 = 25