Я пытаюсь решить вопрос, который говорит,Обновление битовые поля в C
Инициализировать новую переменную в значение 17512807u.
Предположим, что число, как обычно, должно быть от 0 как наименее значимое (справа от ) до 31 (наиболее значимое, слева). Обновить биты с 18 по 21 с целым значением 8 и битами с 10 по 14 со значением 17 (десятичный). Распечатайте полученное значение в виде восьмизначного шестнадцатеричного числа , чтобы показать все цифры.
Я понимаю, что мне нужно делать, и мой код работает нормально, но мне сказали, что мой ответ неверен.
#include <stdio.h>
int main(){
int value = 17512807u;
int L = 21; // starting left position
int R = 18; // starting right position
int mask = (1 << (L - R + 1) - 1) << R;
int newField = (8 << R) & mask; // integer value 8, shifting to right
int newValue = value & (~mask); // remove range of bits
value = newField | newValue; // update range of bits
L = 14;
R = 10;
mask = (1 << (L - R + 1) - 1) << R;
newField = (17 << R) & mask;
newValue = value & (~mask);
value = newField | newValue;
printf("%08x\n", value);
}
Поскольку я не знаю, правильный ответ, и единственная информация, я дал, что мой ответ не так, я не понимаю, что я делаю неправильно.
В последнее время [попросил ОП здесь] (http://stackoverflow.com/questions/42259429/updating-fields-of-bits-incorrectly). Почему вы все еще используете 'int' для значения' 17512807u' после того, как вам рекомендуется использовать 'unsigned'? –
@WeatherVane Я пробовал это, он ничего не меняет –
Итак, я думаю, вы продолжите игнорировать это [хороший совет] (http://stackoverflow.com/questions/42259429/updating-fields-of-bits-incorrectly# комментарий71677181_42259429) от @Olaf? Я не понимаю, почему люди задают вопросы, а затем продолжают слепо. –