Итерация битов символа

Принятие у меня есть символ "C", чей код ASCII 0110 0111. Как я могу выполнить итерации по его битам? Я хотел бы создать вектор из них 1's и 0....

6
задан rodrigoap 19 March 2010 в 20:31
поделиться

6 ответов

Вы можете легко перебирать их, используя побитовые операторы:

char c = 'C';
for (int i = 0; i < 8; ++i)
{
  // extract the i-th bit
  int b = ((c & 1<<i) >> i);
  // b will be 1 if i-th bit is set, 0 otherwise

  // do whatever you want with b
}

вы можете оптимизировать это (как предлагается в комментариях):

int b = ((c >> i) & 1);
13
ответ дан 8 December 2019 в 12:58
поделиться

У символа есть целочисленное значение. Что-то вроде этого будет работать:

 int myChar = 42;
 String binstr = Integer.toBinaryString(myChar);

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

3
ответ дан 8 December 2019 в 12:58
поделиться

Развернутый цикл:

int[] bits = new int[8]
bits[0] = (c & 1) > 0 ? 1 : 0;
bits[1] = (c & 2) > 0 ? 1 : 0;
bits[2] = (c & 4) > 0 ? 1 : 0;
bits[3] = (c & 8) > 0 ? 1 : 0;
bits[4] = (c & 16) > 0 ? 1 : 0;
bits[5] = (c & 32) > 0 ? 1 : 0;
bits[6] = (c & 64) > 0 ? 1 : 0;
bits[7] = (c & 128) > 0 ? 1 : 0;
0
ответ дан 8 December 2019 в 12:58
поделиться

Просто используйте побитовые проверки в каждой позиции, о которой вы заботитесь. Что-то вроде следующего создаст массив bits, который будет содержать отдельные значения.

char c = 'C';
int[] bits = new int[8];

int j = 0;
for(int i = 1; i <= 256; i *= 2){
    bits[j++] = (c & i) > 0 ? 1 : 0;
}
2
ответ дан 8 December 2019 в 12:58
поделиться

Вам нужно будет сделать это с поразрядными операциями:

то есть:

while (my_char > 0) {
  if my_char & 1 
    char_vector.push 1 // if the right most bit is 1
  else 
    char_vector.push 0 // right most bit must be 0 if we fell through to the else
  my_char = my_char >> 1 // right shift one position
}

если вам нужно, вы можете дополнить char_vector оставшимися нулями после того, как вы сдвинетесь вправо до нуля.

0
ответ дан 8 December 2019 в 12:58
поделиться
char c = 'C';
Vector<Boolean> vector = new Vector<Boolean>(16);
for (int i = Character.SIZE-1; i >=0; --i) {
    int num = c >> i;
    boolean set = (num & 1) == 1;
    vector.add(Boolean.valueOf(set));
}
0
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: