Присвоение значения переменной - PullRequest
0 голосов
/ 03 марта 2010

Если бы я хотел преобразовать двоичный код в десятичный, есть ли способ сделать это:

Предполагая, что:

newState[i-2] = 0,
newState[i-1] = 0,
newState[i] = 1

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.

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

Ответы [ 3 ]

1 голос
/ 03 марта 2010

Ваш вопрос несколько неясен. Что именно у вас есть? У вас есть массив с элементами, содержащими отдельные биты вашего значения? Затем вам нужно составить реальное значение из этих битов, например

bit[0] = 0;
bit[1] = 0;
bit[2] = 1;
unsigned int value = (bit[0]) | (bit[1]<<1) | (bit[2]<<2);

Или у вас есть значение, которое вы хотите отобразить в двоичном виде? Затем вам нужно преобразовать значение в двоичное представление, извлекая отдельные биты и отображая соответствующий символ. К сожалению, модификатор двоичного представления не доступен для стандартных функций, использующих строки формата (так как %x для шестнадцатеричных строк).

Или у вас есть строковое представление значения в двоичном формате? В этом случае вы можете захотеть взглянуть на strtoul , который может преобразовывать строковые представления значений в их значения для диапазона числовых баз, включая основание 2.

Как правило, число в C не имеет двоичного, шестнадцатеричного или любого другого формата. Число - это число, и единственный формат, который у него есть (кроме представления на реальной машине), это просто его длина и то, подписано ли оно или нет, (здесь я опускаю числа с плавающей запятой). «Двоичный», «шестнадцатеричный», «десятичный» и тому подобное являются только представлениями одного и того же значения для читателя, то есть человека. Значение на машине абсолютно идентично независимо от этого представления.

binary = newState[i-2], newState[i-1], newState[i]; // but if I did this, bin = 0, not 001.

Это выражение, которое использует оператор запятой . Вы не можете объединять такие значения или строки в C.

1 голос
/ 03 марта 2010

Вы можете использовать битовое перемешивание (предполагается, что newState[N] - это либо 0, либо 1):

binary = (newState[i-2] << 2) |
         (newState[i-1] << 1) |
         (newState[i]);
0 голосов
/ 03 марта 2010

Если вы хотите хранить массив двоичных значений, вы можете использовать int для этого. Таким образом, вы автоматически получите номер. получить значения также легко, поспорив, что вы звоните (x & (1 << i))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...