Что должна вернуть функция? - 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.