Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/64: Рейтинг темы: голосов - 64, средняя оценка - 4.88
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100

Как правильно вводить числа длины 128 бит и работать с ними?

12.02.2018, 17:07. Показов 13902. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Столкнулся с проблемой понимания того, что из себя вообще представляют числа длины 128 бит. Правильно ли я понимаю, что это любые целые числа из диапазона от - 9223372036854775808 до + 9223372036854775807? И каким образом можно инициализировать переменную такой длины (какой тип данных указывать)?
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2018, 17:07
Ответы с готовыми решениями:

TeX функции: как правильно с ними работать
в выражении есть teX функции означающие математические алгоритмы, как их можно обработать в строке вот пример \prod_{i=1}^3 i +...

GDDR3/256 бит или GDDR5/128 бит ?
Посоветуйте пожалуйста. http://market.yandex.ru/model.xml?hid=91031&modelid=6174040 или ...

На сколько GT740m 128 бит производительней GT740 64 бит
Доброго времени суток! В скором времени будет куплен ноутбук, предположительно с видеокартой GT740m. Но у данной видеокарты есть две...

18
Модератор
Эксперт С++
 Аватар для zss
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
12.02.2018, 17:12
Эта длина в языке не реализована
long long int - это 64 разрядные числа.
Поэтому нужно использовать специальные пакеты по длинной арифметике.
Например boost::multiprecision
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 17:15  [ТС]
zss, а можно ли как-то реализовать вручную, без использования готовых пакетов?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 17:23
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
а можно ли как-то реализовать вручную, без использования готовых пакетов?
Есть базовые типы данных, есть пользовательские типы данных. Базовые не отключить, пользовательские можно добавлять сколько сил хватит. Пользовательские типы данных производные от базовых.
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 17:27  [ТС]
outoftime, а от какого базового типа данных лучше отталкиваться при реализации 128-битных чисел? __int64 ?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
12.02.2018, 17:43
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
И каким образом можно инициализировать переменную такой длины (какой тип данных указывать)?
В gcc - объявить как __int128. В Студии - хз.
Цитата Сообщение от zss Посмотреть сообщение
long long int - это 64 разрядные числа.
Стандарт вообще не оговаривает размера long long.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 17:50
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
а от какого базового типа данных лучше отталкиваться при реализации 128-битных чисел? __int64 ?
Можно посмотреть реализацию __int128 в gcc (: Ну а вообще, надо смотреть что может компилятор. Если не умеет, делать структуру из 2х подряд идущих int64_t и с ними работать как с одним числом.

Добавлено через 2 минуты
Еще можно библиотеку "больших" чисел подключить, но там надстройка будет больше чем просто структура из 2х 64битных ячеек.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
12.02.2018, 17:59
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
Правильно ли я понимаю, ...-9223372036854775808 до + 9223372036854775807?
вроде неправильно, маловато, это 64
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 18:01  [ТС]
outoftime, то есть нужно создать структуру по типу такой?:
C++
1
2
3
4
5
struct bit128
{ 
    int64_t first;
    int64_t second;
}
А как сделать их составными частями одного большого числа, как сделать, чтобы они шли подряд?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 18:24
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
А как сделать их составными частями одного большого числа, как сделать, чтобы они шли подряд?
При создании объекта структуры первые 64 бита это first а дальше second. Порядок такой как вы объявляете в структуре. Весь размер структуры - сумма размеров полей т.е. 128 битов.

Нужно определить арифметические операции и т.д. и будет круто.

Добавлено через 49 секунд
Или вы хотите создать структуру int256?
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 21:00  [ТС]
outoftime,
Цитата Сообщение от outoftime Посмотреть сообщение
Или вы хотите создать структуру int256?
Нет, мне нужны числа именно длины 128 бит.
Цитата Сообщение от outoftime Посмотреть сообщение
При создании объекта структуры первые 64 бита это first а дальше second.
А как для каждого поля задать именно 64 бита?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 21:50
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
А как для каждого поля задать именно 64 бита?
Вы не поняли. Вы объявили структуру.

C++
1
struct v1 {};
Её размер 0 байт (точно не уверен, надо старожил спросить)

Дальше вы хотите добавить поле, скажем int64_t размер которого 64 бита

C++
1
struct v2 { int64_t first; };
Размер структуры стал 64 бита или 4 байта. Вы можете обращаться к этой структуре как к массиву байт (char) и получать доступ к каждому байту по индексу

C++
1
2
3
4
5
6
void example2()
{
    char *array = reinterpret_cast<char *>(new v2());
    array[0] = 0;
    array[1] = 1;
}
Также можно сделать наоборот, выделить 64 байта массивом и обращаться к тему как структуре v2. Причем полей может быть и больше, тогда каждое поле имеет своё начало и конец. Если брать v2 тогда first начинается с начала структуры и заканчивается через 64 бита, ибо это размер типа данных int64_t.
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
12.02.2018, 22:02
Лучший ответ Сообщение было отмечено _lunar_ как решение

Решение

Sergeev Fedor, Вам не из этого случайно что нибудь нужно
Типы данных
Для работы с векторными данными, содержащими несколько упакованных значений, в языках С/С++ используются следующие типы данных:

__m64 - 64-бит (регистр MMX): 1 * 64-битное целое, 2 * 32-битных целых, 4 * 16-битных целых, 8 * 8-битных целых.

__m128 - 128-бит (регистр XMM): 4 * 32-битных вещественных (SSE), 2 * 64-битных вещественных (SSE2).
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 23:32  [ТС]
outoftime, а как мне реализовать ввод с клавиатуры десятичного числа длины 128 бит для дальнейшей с ним работы?
Цитата Сообщение от outoftime Посмотреть сообщение
void example2()
{
* * char *array = reinterpret_cast<char *>(new v2());
* * array[0] = 0;
* * array[1] = 1;
}
Это ведь в двоичном виде ввод, мы должны ввести значения всех 64 битов для каждого поля структуры?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 23:40
мановар, link

Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
мы должны ввести значения всех 64 битов для каждого поля структуры?
Да нет же, просто переопределяется friend std::istream & operator>>(std::ostream & in_stream, v2 & value); в котором провоидтся чтение. Но в целом, 128 бить прочитать ... http://e-maxx.ru/algo/big_integer глава "Чтение" только вместо вектора у тебя будут всего 2 значения "нижняя" и "верхняя" части числа или левая и правая, любая абстракция хороша пока она помогает.

Вообще, это всё "вода", нужно больше конкретики.
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
12.02.2018, 23:56  [ТС]
Цитата Сообщение от outoftime Посмотреть сообщение
Вообще, это всё "вода", нужно больше конкретики.
В принципе сама конкретная цель это реализовать программу для работы с числами длинной 128 бит, где должны быть реализованы арифметические операции, операции сравнения. То есть, иметь возможность производить действия с большими числами. Например, тридцатизначное число сложить с двадцатизначным. Но также и с более маленьким числами, например двухзначное на двухзначное.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
12.02.2018, 23:59
Цитата Сообщение от Sergeev Fedor Посмотреть сообщение
В принципе сама конкретная цель это реализовать программу для работы с числами длинной 128 бит, где должны быть реализованы арифметические операции, операции сравнения. То есть, иметь возможность производить действия с большими числами. Например, тридцатизначное число сложить с двадцатизначным. Но также и с более маленьким числами, например двухзначное на двухзначное.
Ну вот и бери себе это за основу и начинай реализацию. А вопросы попутно можешь на форуме спрашивать. Можешь еще посмотреть как работают библиотеки, которые реализуют работу с "большими числами" и у них почерпнуть пару идей, тебе ведь надо будет только 2 числа хранить а не огромные массивы.
1
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,824
13.02.2018, 00:25
Sergeev Fedor, не надоест 128 бит с клавиатуры вводить?

Добавлено через 38 секунд
3,402823669×10³⁸
0
 Аватар для Sergeev Fedor
6 / 5 / 1
Регистрация: 22.01.2016
Сообщений: 100
13.02.2018, 00:31  [ТС]
outoftime, ладно спасибо и на этом. Буду пытаться реализовывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2018, 00:31
Помогаю со студенческими работами здесь

printf и integer 128 бит, как вывести значение?
Как напечатать через printf знаковый и беззнаковый 128-битный integer? Пробовал через llu и lllu, но пишет несоответствие...

Число размером 128 бит
Бьюсь над реализацией алгоритма IDEA. Исходников на C# найти не удалось. Необходимо задать ключ размером 128 бит и потом его циклически...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru