Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347

Перевести биты int в unsigned int

10.10.2019, 17:33. Показов 6552. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, как можно получить из int -> unsigned int, т.е. где все биты в таком же порядке, по идее тогда будет без минуса.

Пример:
int - -2147483647
unsigned int - 0

int 0
unsigned int - 2147483647
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2019, 17:33
Ответы с готовыми решениями:

Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int.
Пользователь вводит двоичную строку (32 символа). Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int.

Как массив char[4] перевести в unsigned int?
Есть массив из 4х char символов (4-е байта), нужно его перевести в unsigned int. Я сделал втупую: unsigned int B=0; ...

Определение типов. Приведение int к unsigned int
При таком определении 5 рассматривается как int. Как при определении указать что 5 будет именно unsigned int? unsigned int n=5; ...

56
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
10.10.2019, 18:05
Цитата Сообщение от k0vpack Посмотреть сообщение
как можно получить из int -> unsigned int, т.е. где все биты в таком же порядке, по идее тогда будет без минуса.
Ничего не понятно. Что значит "без минуса"? Что именно должно происходить с отрицательными значениями?

Цитата Сообщение от k0vpack Посмотреть сообщение
int - -2147483647
unsigned int - 0
Почему -2147483647 вдруг превратилось в 0?

Цитата Сообщение от k0vpack Посмотреть сообщение
int 0
unsigned int - 2147483647
Почему 0 превратился в 2147483647.

Как это связано с "битами"?
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
11.10.2019, 04:27
abs(intval)
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
11.10.2019, 18:31  [ТС]
TheCalligrapher, так при signed последний бит отводиться на знак, а при unsigned - на число, выходит что максимальное число увеличиваеться в два раза, а минимальным становиться ноль. Значит минимальное при int != минимальному при unsigned int, и так же с максимальный
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
11.10.2019, 18:45
k0vpack, ну так прибавьте тогда к инту 2147483647, что мешает?

Добавлено через 1 минуту
C++
1
2
3
unsigned ui;
int n = 10;
ui = n + 2147483647;
или
C++
1
ui = n + INT_MAX;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
11.10.2019, 19:20
Цитата Сообщение от k0vpack Посмотреть сообщение
TheCalligrapher, так при signed последний бит отводиться на знак, а при unsigned - на число, выходит что максимальное число увеличиваеться в два раза, а минимальным становиться ноль. Значит минимальное при int != минимальному при unsigned int, и так же с максимальный
Это все прекрасно. Но вы по-прежнему не ответили на вопрос, откуда взялись такие странные значения из примеров в вашем вопросе. Почему -2147483647 вдруг превратилось в 0? Почему 0 превратился в 2147483647?

Для того, чтобы перевести значение int в тип unsigned int ничего делать не надо - это преобразование является встроенным свойством языка. Вас языковое преобразование чем-то не устраивает? Да? Нет? Если нет, что чем?

По какому правилу/закону выполняется перевод? Почему оно до сих пор не приведено? Что вам надо сделать? Где ответы на эти вопросы?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
11.10.2019, 19:21
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
По какому правилу/закону выполняется перевод?
Просто сдвиг по оси.
Например: интервал от -10 до 10 он переводит в интервал от 0 до 20 (я так понял)
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
11.10.2019, 19:23
Цитата Сообщение от Avaddon74 Посмотреть сообщение
unsigned ui;
int n = 10;
ui = n + 2147483647;
https://wandbox.org/permlink/jMesXyQ1UclaQFt3
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
11.10.2019, 19:24
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Просто сдвиг по оси.
Если нужен "сдвиг по оси", то почему в заголовке вопроса речь идет о некоем "перевести биты"? При чем здесь "перевод битов"?
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
11.10.2019, 19:26
rat0r, да я пример привел, т.е. идею, это не значит что нужно делать именно так

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
то почему в заголовке ...
1. неправильная формулировка вопроса
2. я не правильно понял
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
11.10.2019, 19:49  [ТС]
Avaddon74, TheCalligrapher, rat0r, к примеру, есть число (в двоичной системе) 11111111 = (в десятичной) 128 - это как бы unsigned int, а если последний бит отвести на знак, то это число будет -68, а при 01111111 будет 67.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
11.10.2019, 19:56
Цитата Сообщение от k0vpack Посмотреть сообщение
11111111
это 255 в unsigned char и -1 в signed
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
11.10.2019, 19:59  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
это 255 в unsigned char и -1 в signed
да, напутал со степенью, но сути не меняет.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
11.10.2019, 20:10
Цитата Сообщение от k0vpack Посмотреть сообщение
а если последний бит отвести на знак
Старший бит да, отвечает за знак, только отсчёт отрицательных чисел идёт от 11111111 по убыванию, а не например от 10000000 по возрастанию.
0
Злостный нарушитель
 Аватар для Verevkin
10242 / 5670 / 1260
Регистрация: 12.03.2015
Сообщений: 26,265
11.10.2019, 22:49
k0vpack, Так чего ж ты хочешь-то, в конце-то концов, ёмаё???
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
11.10.2019, 23:22
k0vpack,
C++
1
2
3
int signedNum = -1;
unsigned int unsignedNum = 0;
std::memcpy(&unsignedNum, &signedNum, sizeof(signedNum));
Начиная с C++20 можно делать вот так:
C++
1
2
3
4
#include <bit>
 
int signedNum = -1;
unsigned int unsignedNum = std::bit_cast<unsigned int>(signedNum);
Под капотом скорее всего будет тот же memcpy.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
12.10.2019, 00:24
Цитата Сообщение от nonedark2008 Посмотреть сообщение
C++
1
2
int signedNum = -1;
unsigned int unsignedNum = 0;
int к unsgined int можно кастить без memcpy - это well-defined

Добавлено через 11 минут
If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source
integer (modulo 2n where n is the number of bits used to represent the unsigned type).
Впрочем как и unsigned int к int.
If the destination type is signed, the value is unchanged if it can be represented in the destination type;
otherwise, the value is implementation-defined.
Кстати с С++20 эту строку убрали из стандарта, это видимо из-за изменения представления int'ов.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
12.10.2019, 00:33
Цитата Сообщение от Azazel-San Посмотреть сообщение
int к unsgined int можно кастить без memcpy - это well-defined
Если я правильно понял ТС, то ему необходимо преобразовать число одного типа в число другого типа с сохранением значениq всех битов. Я специально не смотрел, но предположу, что стандарт не гарантирует того, что при обычном касте биты не поменяются.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
12.10.2019, 01:10
nonedark2008, ну как бы из знакового в беззнаковый как раз гарантирует, я же привёл цитату.
И раз речь зашла о с++20, то есть вероятность что и знаковый в беззнаковый кастится без проблем, тк в с++20 знаковые теперь представлены иначе и переполнение знаковых не UB.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
12.10.2019, 01:31
Цитата Сообщение от nonedark2008 Посмотреть сообщение
int signedNum = -1;
unsigned int unsignedNum = 0;
std::memcpy(&unsignedNum, &signedNum, sizeof(signedNum));
Насколько мне известно, UB. memcpy-то между двумя объектами одного trivially copyable типа "разрешён" только ненормативной сноской, а между разными типами это вообще ХЗ что значит.

Цитата Сообщение от Azazel-San Посмотреть сообщение
И раз речь зашла о с++20, то есть вероятность что и знаковый в беззнаковый кастится без проблем
Да, с "сохранением" значений соответствующих битов.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2019, 01:31
Помогаю со студенческими работами здесь

Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"?
Ребят, срочно прошу вас помочь.. Есть ошибка (невозможно преобразовать аргумент 1 из &quot;unsigned int&quot; в &quot;unsigned int...

Надо перевести переменную типа unsigned char* в signed int и обратно
у меня есть переменная типа unsigned char*, мне нужно перевести ее в signed int , провести арифметические вычисления и затем перевести ее...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

[C++ Error] Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int'
Всем привет! Пожалуйста , помогите , почему выдает ошибку Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int' ?. Мне нужно...

Перевести long long unsigned int в массив char
Подскажите, пожалуйста, как превратить число типа long long unsigned int в массив символов? Каждый символ - цифра числа в 16-значной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru