2015-02-06 2 views
4

Учитывая значение unsigned int x, я хочу установить n-й бит в y, а y может быть либо 0, либо 1. Возможно ли создать выражение с использованием побитовых операторов, чтобы избежать этого использование каких-либо условных утверждений? Благодарю.Установка n-го бита unsigned int

+1

Пожалуйста, прочтите [Как спросить] (http://stackoverflow.com/help/how-to-ask). – segarci

ответ

3
x = (x & (~(1 << n))) | (y << n) 

Довольно просто. (Во-первых, снимите n-й бит, и установить n-й бит в 1 если y является 1.)

+0

Тем не менее это условие, даже если оно находится в одной строке. – Eun

+0

Спасибо! Я никогда не думал об этом. – user95297

+0

@Eun По условию я имел в виду без необходимости проверять значение y, используя инструкцию if-else или что-то подобное. – user95297

0
x ^= (-y^x) & (1 << n); 
+0

Это не является безусловным. OP хочет это без каких-либо условий. – Eun

+0

Мне это известно, но мне интересно, можно ли включить y в выражение, чтобы оба случая (с y равным 0 или 1) могли обрабатываться одним утверждением. – user95297

+0

@Eun Извините, что вы правы, я пропустил это. Исправлен мой ответ. – emlai

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