82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
|
|
1 | |
Перевести биты int в unsigned int10.10.2019, 17:33. Показов 5403. Ответов 56
Метки нет (Все метки)
Доброго времени суток, как можно получить из int -> unsigned int, т.е. где все биты в таком же порядке, по идее тогда будет без минуса.
Пример: int - -2147483647 unsigned int - 0 int 0 unsigned int - 2147483647
0
|
10.10.2019, 17:33 | |
Ответы с готовыми решениями:
56
Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int. Как массив char[4] перевести в unsigned int? Определение типов. Приведение int к unsigned int Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? |
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
|
|
10.10.2019, 18:05 | 2 |
Ничего не понятно. Что значит "без минуса"? Что именно должно происходить с отрицательными значениями?
Почему -2147483647 вдруг превратилось в 0 ?Почему 0 превратился в 2147483647 .Как это связано с "битами"?
0
|
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
|
|
11.10.2019, 18:31 [ТС] | 4 |
TheCalligrapher, так при signed последний бит отводиться на знак, а при unsigned - на число, выходит что максимальное число увеличиваеться в два раза, а минимальным становиться ноль. Значит минимальное при int != минимальному при unsigned int, и так же с максимальный
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|||||||||||
11.10.2019, 18:45 | 5 | ||||||||||
k0vpack, ну так прибавьте тогда к инту 2147483647, что мешает?
Добавлено через 1 минуту
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
|
|
11.10.2019, 19:20 | 6 |
Это все прекрасно. Но вы по-прежнему не ответили на вопрос, откуда взялись такие странные значения из примеров в вашем вопросе. Почему -2147483647 вдруг превратилось в 0? Почему 0 превратился в 2147483647?
Для того, чтобы перевести значение int в тип unsigned int ничего делать не надо - это преобразование является встроенным свойством языка. Вас языковое преобразование чем-то не устраивает? Да? Нет? Если нет, что чем? По какому правилу/закону выполняется перевод? Почему оно до сих пор не приведено? Что вам надо сделать? Где ответы на эти вопросы?
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
11.10.2019, 19:21 | 7 |
Просто сдвиг по оси.
Например: интервал от -10 до 10 он переводит в интервал от 0 до 20 (я так понял)
0
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
11.10.2019, 19:23 | 8 |
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
|
|
11.10.2019, 19:24 | 9 |
Если нужен "сдвиг по оси", то почему в заголовке вопроса речь идет о некоем "перевести биты"? При чем здесь "перевод битов"?
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
11.10.2019, 19:26 | 10 |
rat0r, да я пример привел, т.е. идею, это не значит что нужно делать именно так
Добавлено через 1 минуту 1. неправильная формулировка вопроса 2. я не правильно понял
0
|
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
|
|
11.10.2019, 19:49 [ТС] | 11 |
Avaddon74, TheCalligrapher, rat0r, к примеру, есть число (в двоичной системе) 11111111 = (в десятичной) 128 - это как бы unsigned int, а если последний бит отвести на знак, то это число будет -68, а при 01111111 будет 67.
0
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
11.10.2019, 19:56 | 12 |
0
|
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
|
|
11.10.2019, 19:59 [ТС] | 13 |
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
11.10.2019, 20:10 | 14 |
Старший бит да, отвечает за знак, только отсчёт отрицательных чисел идёт от 11111111 по убыванию, а не например от 10000000 по возрастанию.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|||||||||||
11.10.2019, 23:22 | 16 | ||||||||||
k0vpack,
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
12.10.2019, 00:24 | 17 |
int к unsgined int можно кастить без memcpy - это well-definedДобавлено через 11 минут unsigned int к int .
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
12.10.2019, 00:33 | 18 |
Если я правильно понял ТС, то ему необходимо преобразовать число одного типа в число другого типа с сохранением значениq всех битов. Я специально не смотрел, но предположу, что стандарт не гарантирует того, что при обычном касте биты не поменяются.
0
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
12.10.2019, 01:10 | 19 |
nonedark2008, ну как бы из знакового в беззнаковый как раз гарантирует, я же привёл цитату.
И раз речь зашла о с++20, то есть вероятность что и знаковый в беззнаковый кастится без проблем, тк в с++20 знаковые теперь представлены иначе и переполнение знаковых не UB.
0
|
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
|
|
12.10.2019, 01:31 | 20 |
Насколько мне известно, UB.
memcpy -то между двумя объектами одного trivially copyable типа "разрешён" только ненормативной сноской, а между разными типами это вообще ХЗ что значит.Да, с "сохранением" значений соответствующих битов.
1
|
12.10.2019, 01:31 | |
12.10.2019, 01:31 | |
Помогаю со студенческими работами здесь
20
Надо перевести переменную типа unsigned char* в signed int и обратно Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec [C++ Error] Unit2.cpp(22): E2034 Cannot convert 'int (*)(int,int *)' to 'int' Перевести long long unsigned int в массив char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |