2014-01-19 3 views
2

У меня есть символ, и я хочу, чтобы установить 1-й бит в 1 и последний бит в 1. Я могу сделать это с помощью следующего кода:Нужно ли инициализировать биты?

char c; 
c |= 1 << 0; 
c |= 1 << 7; 
cout << c; 

Вопрос прост: я просто установить биты 1 и 8: 1. Нужно ли устанавливать биты от 2-7 до 0, или это делается по умолчанию? Если я сохраню код, как он выше, есть ли вероятность неопределенного поведения?

+0

Непонятно, что вы хотите сделать. Ваши предложения противоречат друг другу. –

+0

Остальные биты остаются такими, какими они были раньше: если они не были определены до ... – delnan

+5

Как насчет c = 129? – Cthulhu

ответ

6

Это зависит от того, где объявляется переменная:

  • если переменная является глобальной или статический один, он это автоматически инициализируются нулем от спецификации ANSI/ISO C
  • если ваша переменная локальная, начальное значение неуказанный.

Мои 2cents: в этом случае, вы всегда должны инициализировать переменную в ноль:

char c = 0; 

a, скорее всего, локальная переменная, поэтому вам придется сделать это в любом случае. При любых обстоятельствах это не будет стоить вам почти ничего, и вы избегаете неприятной ошибки.

3

В вашем примере вы должны сначала установить c = 0;.

Но вместо этого вы можете просто установить c = (1<<0) | (1<<7);.

P.S.: если это статическая переменная (локальная или глобальная), то она устанавливается в 0 компилятором или компоновщиком.

+0

Компилятор ... –

+0

Теперь мне кажется, что я думаю об этом; спасибо за внимание ... –

2

1 << 0 означает 1 смещается влево на 0. который равен 1.

1 << 7 средство 1 сдвигается влево на 7. который равен 128 (0b10000000).

Текущее значение c, однако, не определено. Таким образом, вы устанавливаете 1 первый и последний бит неопределенного значения. Если вы собираетесь иметь: 0b10000001, вы можете либо установить c = 0 или написать c = (1 << 0) | (1 << 7);

+0

Откуда вы знаете, что они «уже есть»? Они могут быть настроены на что угодно. – juanchopanza

+2

ОП не назначает, он объединяется с OR! –

+0

Вопрос OP был неясным, я предположил, что c уже установлен правильно, и он хотел изменить первый и последний бит. –

Смежные вопросы