Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
1

Беззнаковое целое и отрицательное число

29.11.2014, 19:37. Просмотров 864. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Если я сначала из беззнакового целого числа вычту положительное число, а потом прибавлю большее положительное - будет ли то же, как если бы я оперировал со знаковыми числами? Вроде то же самое получилось в примере, но хочется убедиться, что это не зависит от чего-нибудь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 19:37
Ответы с готовыми решениями:

Распаковать беззнаковое целое число в четыре символа
«Распаковать» беззнаковое целое число в четыре символа. Длина беззнакового...

Функция которая принимает целое беззнаковое число.
Вообщем надо написать функцию которая принимает целое беззнаковое число и...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д.
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное...

«Упаковать» четыре символа в беззнаковое целое
«Упаковать» четыре символа в беззнаковое целое. Длина беззнакового целого равна...

Найти отрицательное число и после отрицательное число заменить все элемент на нули
Найти отрицательное число и после отрицательное число заменить все элемент на...

5
JIeIIIa
862 / 496 / 118
Регистрация: 23.05.2012
Сообщений: 6,921
29.11.2014, 21:04 2
Цитата Сообщение от AndrSlav Посмотреть сообщение
если бы я оперировал со знаковыми числами
Вообще от компилятора зависит. Чаще всего будет, но лучше так не делать. Хотя забудете раз проконтролировать - поймете)
В чем проблема работать со знаковым числом?
0
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
29.11.2014, 21:26  [ТС] 3
JIeIIIa, использую с расчетом на будущее - если будет нужно очень много памяти (> 4 Гб). Сейчас в одном из алгоритмов для удобства нужно в массив присвоить ряд положительных и отрицательных элементов, чтобы в ходе вычислений к ним в цикле прибавлять положительные значения, в результате получаются положительные значения. А еще в качестве заведомо неправильного значения раньше (для знакового) использовал -1, сейчас использую то же значение, но оно преобразуется в максимальное целое. Да и вообще в ходе вычислений наверняка есть места типа a=-b+c, где b и c положительные и b<c - т.е. сначала создается временная переменная с 'отрицательным' значением (вроде так?). Не хотелось бы менять, но и нежданчик в результате получить не хочется.
p.s. использую size_t

Добавлено через 11 минут
pps вспомнил откуда сомнения растут. Как-то уже спрашивал по арифметике указателей, может, надо было в той же теме и этот вопрос задать. Источник сомнений - в последней строчке ответа арифметика указателей .
правда я не уверен( проверять надо), что
-2 будет 0x00000000fffffffe а не 0xfffffffffffffffe
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
29.11.2014, 21:31 4
Цитата Сообщение от AndrSlav Посмотреть сообщение
т.е. сначала создается временная переменная с 'отрицательным' значением (вроде так?).
Нет. Не с отрицательным, а с переполненным. Есть у тебя n бит, если ты займёшь при вычитании из старшего, то что будет? Дополним число ещё одним битом, если занять при вычитании бита, который был старшим, то это займ из нового старшего. Если туда приписать 1, то он обнулится. Дополни 0 этим битом. Например, было 16 бит, 0 - это все ноли, дополняем, получается 10000000000000000, вычитаем 1, получается 01111111111111111, бит, которым дополняли, убираем, получается 1111111111111111. Но это максимальное двоичное число данной разрядности. Таким образом, отрицательные числа представляются результатом вычитания их модуля из наименьшего не представимого. При сложении наоборот перенос в старшем разряде идёт в бит, которого нет, 1111111111111111 двоичное + 1 = 10000000000000000, но бит всего 16 и получается 0000000000000000. Если при переполнении не происходит исключения, принудительного присваивания специального значения, или ещё какой пакости, то результат не зависит от того, сначала ты вычтешь, или сначала сложишь, а вычтешь из суммы. Но как знаковый тип данного связан с количеством данных и используемой для их хранения памяти? Ладно ещё количество беззнаковое, здесь связь ещё можно понять. Но сами данные?
1
AndrSlav
65 / 53 / 14
Регистрация: 20.12.2013
Сообщений: 429
30.11.2014, 00:55  [ТС] 5
Цитата Сообщение от taras atavin Посмотреть сообщение
Но как знаковый тип данного связан с количеством данных и используемой для их хранения памяти
Для данных выделяю массив - int не всегда 64 битный даже на 64 битной платформе. Т.е. нужно для индексации массивов.
Цитата Сообщение от taras atavin Посмотреть сообщение
Если при переполнении не происходит исключения, принудительного присваивания специального значения, или ещё какой пакости, то результат не зависит от того, сначала ты вычтешь, или сначала сложишь, а вычтешь из суммы.
Я так тоже думал, но вспомнил про старую тему (к предыдущему значению приписал). Тогда не вник, а сейчас появились вопросы (с нулями).

Добавлено через 3 часа 14 минут
опечатка - не к значению, а к сообщению предыдущему приписал
0
taras atavin
4204 / 1765 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
30.11.2014, 12:12 6
Цитата Сообщение от AndrSlav Посмотреть сообщение
Для данных выделяю массив - int не всегда 64 битный даже на 64 битной платформе. Т.е. нужно для индексации массивов.
Индекс не обязан иметь тип, совпадающий с типом индексируемого данного.
0
30.11.2014, 12:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2014, 12:12

Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри
Дано целое число , лежащие в диапазоне от -999 до 999. Вывести строку -...

Дано целое число.Если оно является положительным,то прибавить к нему 1;если отрицательное,то вычесть из него 2
Дано целое число.Если оно является положительным,то прибавить к нему 1;если...

Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз
задание такое Составить функцию, которая, получив целое число определяет,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru