c - трудности с битовыми операциями - PullRequest
4 голосов
/ 04 мая 2010

Я отлаживаю программу с помощью GDB.

unsigned int example = ~0;

дает мне:

(gdb) x/4bt example
0xffd99788:     10101000        10010111        11011001        11111111

почему это не все 1? я определил его как ~ 0 ... тогда следующая строка кода:

example>>=(31);

и GDB дает мне это, когда я пытаюсь проверить память в битах:

(gdb) x/4bt example
0xffffffff:     Cannot access memory at address 0xffffffff

что происходит ???

Ответы [ 3 ]

8 голосов
/ 04 мая 2010

Вам нужно взять адрес примера в инструкции gdb:

(gdb) x/4bt &example
5 голосов
/ 04 мая 2010

Я думаю, что команда x проверяет память, поэтому example будет интерпретироваться как указатель. Попробуйте

x/4bt &example

или просто

print /x example
0 голосов
/ 04 мая 2010

Я не проверял формат команды gdb, но, глядя на последнее утверждение, кажется, что вы хотите увидеть, что находится по адресу, хранящемуся в example вместо печати example ... кажется, что example all 1s (0xffffffff), и вы пытаетесь просмотреть это место в памяти, когда получаете сообщение об ошибке.

...