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

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

12.02.2018, 17:07. Показов 13669. Ответов 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
13770 / 10963 / 6491
Регистрация: 18.12.2011
Сообщений: 29,240
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
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
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
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru