![]() |
|
Модераторы: bsa |
![]()
|
|
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Как известно, тип unsigned - целое, без знака, от 0 и выше.
Почему тогда после применения оператора побитового отрицания ~, b = -17 ?
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
printf выводит в соответствии со спецификацией формата, а не типа аргументов (который может быть любым).
вы использовали %d, что означает знаковое целое
|
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Теперь b = 4294967279, должно получиться b = 239 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
int = 4 байт = 32 бит Я запутался ... 00010000 после "трансформации" получается 11101111, и если 11101111 в калькуляторе перевести в дес., то получится 239 Это сообщение отредактировал(а) n199a - 23.7.2013, 17:16 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
http://ideone.com/KQ79GB
Добавлено @ 17:20 в '00010000' не 32 а 8 бит, не так ли? а калькулятор, видимо, работает не с int, а с введенным количеством бит (возможно, выровненным до 8) Добавлено через 4 минуты и 7 секунд
Это сообщение отредактировал(а) baldina - 23.7.2013, 17:20 |
|||
|
||||
| n199a |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
В int 32 бита. Я присвоил a число в 8 бит. Тип int = 4 байт = 32 бита: 000000000000000000000000000000000000000000 (32 бита) Присвоенно число переменной а занимает 8 бит. После того, как "положили" a в int, получилось: 00010000 (8 бит) Получится так: 000000000000000000000000000000000000010000 После использования оператора побитового отрицания(~), полчится: 11111111111111111111111111101111 Что, в свою очередь, равно десятичному 4294967279 Я правльно решил? Это сообщение отредактировал(а) n199a - 23.7.2013, 17:30 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
да
Добавлено @ 17:34 ну только они не оставшиеся. почему вы делите 32 на 24 и 8? они все вместе инвертируются. точнее, каждый из них Добавлено @ 17:37
а, я не внимательно читал. не было присваивания 8 бит. 0x10 это не 8 бит, а int. значит двоичное представление 0x10 это 00000000 00000000 00000000 00010000 (если int 32-битный) Это сообщение отредактировал(а) baldina - 23.7.2013, 17:38 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |