Что должна вернуть функция? - C (СИ)
Формулировка задачи:
Здравствуйте. Функции
turn_bit_on()
,turn_bit_off()
иtoggle_bit()
при передаче им некорректного номера бита должны каким-то образом проинформировать вызывающего об ошибке. На данный момент они возвращают-1
, но ведь единички могут получиться и при корректной работе. Собственно, что должна вернуть функция в таком случае, каким образом можно обойти проблему? Может быть, просто поставить запрет на использование старшего бита?#include <stdio.h> int check_range(int); int check_bit(int, int); int turn_bit_on(int, int); int turn_bit_off(int, int); int toggle_bit(int, int); int main() { printf("check: %d\n", check_bit(5, 0)); // 1 printf("on: %d\n", turn_bit_on(5, 1)); // 7 printf("off: %d\n", turn_bit_off(5, 0)); // 4 printf("toggle on: %d\n", toggle_bit(5, 1)); // 7 printf("toggle off: %d\n", toggle_bit(5, 0)); // 4 return 0; } int check_range(int bit_id) { int size = sizeof(int) * 8; return (bit_id >=0 && bit_id < size) ? 1 : 0; } int check_bit(int value, int bit_id) { int pattern = 1; if (check_range(bit_id)) { pattern <<= bit_id; value = (value & pattern) ? 1 : 0; } else { value = -1; } return value; } int turn_bit_on(int value, int bit_id) { int pattern = 1; if (check_range(bit_id)) { pattern <<= bit_id; value |= pattern; } else { value = -1; } return value; } int turn_bit_off(int value, int bit_id) { int pattern = ~1; if (check_range(bit_id)) { pattern <<= bit_id; value &= pattern; } else { value = -1; } return value; } int toggle_bit(int value, int bit_id) { int pattern = 1; if (check_range(bit_id)) { pattern <<= bit_id; value ^= pattern; } else { value = -1; } return value; }
Решение задачи: «Что должна вернуть функция?»
textual
Листинг программы
int turn_bit_on(unsigned long* const pval, const unsigned int n) { if( n > 31 ) { return 0; } *pval &= 1 << n; return 1; }
Объяснение кода листинга программы
- Входные данные функции:
- pval (unsigned long* const) - указатель на переменную типа unsigned long, в которой нужно установить бит;
- n (const unsigned int) - целочисленная константа, номер бита, который нужно установить.
- Выходные данные функции:
- 1 (return 1;) - функция возвращает 1, если бит был успешно установлен, и 0 в случае ошибки (если n больше 31).
- Описание работы функции:
- Проверка условия: если n больше 31, то функция возвращает 0 и прекращает выполнение.
- Исполнение операции по установке бита в значение 1 с помощью оператора побитового И (&= 1 << n;).
- Возврат 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д