2015-10-12 2 views
-1

Таким образом у меня есть следующий номер шестигранного:Расширение шестнадцатеричного числа

0x55 which is 0101 0101 

И мне нужно, чтобы распространить его на 0x55555555. Только ops, которые я могу использовать, следующие:

Legal ops: ! ~ &^| + << >> 

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

+2

Ну, у вас есть 8 бит и необходимость сделать еще 3 копии. Один из способов состоит в том, чтобы сделать одну копию, чтобы получить 16-битное число, а затем сделать 2 копии этого, так что у вас есть 32. Чтобы скопировать, сдвиньте необходимое количество бит слева и «или» с оригиналом. 'unsigned x = 0x55; x | = x << 8; x | = x << 16; printf ("% x \ n", x); ' – Gene

+0

Это имеет большой смысл! Спасибо @Gene – halapgos1

+0

Если вам не разрешено использовать операторы присваивания, вам не удастся это сделать. – Lundin

ответ

1
#include <stdio.h> 

int main() 
{ 
    unsigned int orig = 0x55; 
    unsigned int new; 

    new = orig | orig << 8 | orig << 16 | orig << 24; 

    printf("orig: 0x%x\n", orig); 
    printf("new: 0x%x\n", new); 

    return 0; 
} 

Выход:

orig: 0x55 
new: 0x55555555 
+0

Операция op не разрешена для использования оператора присваивания. – Lundin

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