![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Rudolf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
Возник вопрос по использованию оператора ~, когда я его применяю допустим к 5, то должно получится 2, но получается -6, т.е. int j=5;j=~j; и j в итоге равно -6, подскажите пожалуйста как это исправить.
|
|||
|
||||
| t_gran |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: 33 Всего: 37 |
А почему вы забываете про остальные биты? Это инверсия integer (4 байта или 16 бит), что в результате получается:
11111111111111111111111111111010 == -6 == 4294967290 -------------------- Я знаю, что ничего не знаю© Сократ ![]() |
|||
|
||||
| Rudolf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
А каким образом их можно урезать?
|
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Тут дело в том, что int имеет разрядность 16 бит, поэтому твое исходное число не 101(2), а 0000000000000101(2). И когда ты применяешь ~, то у тебя получается число 1111111111111010(2). А так как int у тебя знаковый, то в соответствии с правилами кодирования чисел и получается -6.
Соответственно тебе надо во-первых использовать беззнаковый тип данных, а во-вторых обнулять все "ненужные" биты. Те вот так:
upd чорд, опередили Это сообщение отредактировал(а) UniBomb - 17.12.2009, 12:02 |
|||
|
||||
| Rudolf |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
Ясно, спасибо за помощь!
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |