Я новичок в программировании на С и не уверен, что уже есть хорошее объяснение того, как это сделать, если так мне жаль. Я пытаюсь установить биты в пределах диапазона, указанного мне. функция подписи выглядит следующим образом:Маскировка битов в диапазоне, заданном в параметре в C
unsigned int setBits(int low, int high, unsigned int source) {
source
является число, которое будет работать на, low
самый низкий бит в диапазоне, и high
самый высокий разряд в диапазоне. Я понимаю, что бит-сдвиг просто прекрасен, когда вы пытаетесь получить конкретно последние 4 бита или первые 4 или любую их комбинацию, но не понимаете, как получить биты из диапазона, который будет изменен в параметре. Любая помощь будет принята с благодарностью.
что-то вдоль линии '(1 << высокий) - (1 << низкий)', в зависимости от того, 'high' /' low' включают или нет. – SleuthEye
они включаются, считая справа налево от 0, при этом низкий справа. Я уже обрабатывал исключения для них равными или низкими> высокими. Вы говорите, что это то, из чего должна быть сделана моя маска, а затем | маску с моим источником? –
Получить n бит из позиции p для числа x .. сделать что-то вроде .... return ((x >> (p + 1n) & ~ (~ 0 << n)) –