2013-12-26 4 views
0

Я не могу понять, почему его вывод равен ffff, он должен быть 0000. Пусть говорят, что int принимает 2 байта ffff будет сохранен в памяти: 1111 1111 1111 1111, после чего значение ~ станет: 0000 0000 0000 0000 но из-за наступающего ffff я пропустил какую-то общую концепцию?Оператор побитового отрицания unsigned int

#include <stdio.h> 
    void main() 
    { 
     unsigned int a = 0xffff; 
     ~a; 
     printf("%x", a); 
    } 

Выход: FFFF

+0

попробовать переназначить его к себе ... только ++ и ++ а являются унарные операции .. – AurA

+3

@AurA, что не ж х унарный оператор. У вас также есть унарные '+', '-' и' ~ ', которые все работают по одному аргументу. Только 'a ++' и '++ a' и' a - 'и' --a' изменяют значение переменной, в которой они работают. – OmnipotentEntity

ответ

2

Оператор ~ не изменяет переменную на месте, она возвращает результат изменения. Поэтому для того, чтобы выполнить побитовое отрицание переменной вам нужно присвоить его себе:

a = ~a; 
1

Как насчет сохранения значения операции:

a = ~a; 

Вы сделали выполнить операцию поразрядного ~, но вы не назначили возвращаемое значение для любой переменной.
Этот оператор возвращает a значение, а не изменяет сама переменная.

5

вы должны сделать

a = ~a; 

присвоить отрицание значения .

или если вы хотите просто напечатать, сделать

printf("%x", ~a); 
1

Вы должны присвоить значение обратно в переменную. Вы просто делаете ~ a. Вы не назначаете его обратно.

a = ~a; 

предоставит вам надлежащий результат.

0

В заявлении

~a; 

~ оператор NOT (дополнение) значение a и его значение получает отбрасываются (в отличие от унарный ++ и --), т.е. ~a не делает ничего, чтобы a, если вы не укажете в a

a = ~a; 
Смежные вопросы