| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++] Побитовое отрицание |
| Автор: Rudolf 17.12.2009, 11:24 |
| Возник вопрос по использованию оператора ~, когда я его применяю допустим к 5, то должно получится 2, но получается -6, т.е. int j=5;j=~j; и j в итоге равно -6, подскажите пожалуйста как это исправить. |
| Автор: t_gran 17.12.2009, 11:49 | ||
А почему вы забываете про остальные биты? Это инверсия integer (4 байта или 16 бит), что в результате получается:
11111111111111111111111111111010 == -6 == 4294967290 |
| Автор: Rudolf 17.12.2009, 11:54 |
| А каким образом их можно урезать? |
| Автор: UniBomb 17.12.2009, 12:01 | ||
| Тут дело в том, что int имеет разрядность 16 бит, поэтому твое исходное число не 101(2), а 0000000000000101(2). И когда ты применяешь ~, то у тебя получается число 1111111111111010(2). А так как int у тебя знаковый, то в соответствии с правилами кодирования чисел и получается -6. Соответственно тебе надо во-первых использовать беззнаковый тип данных, а во-вторых обнулять все "ненужные" биты. Те вот так:
upd чорд, опередили |
| Автор: Rudolf 17.12.2009, 12:03 |
| Ясно, спасибо за помощь! |