//o/p when i/p is 16 and 2 is 4 and if variable is int then o/p will be 20;
#define SETBIT(A,B) A|1<<B
int main(){
char n,pos;
printf("Enter a value");
scanf("%d",&n);
printf("Enter position");
scanf("%d",&pos);
printf("Value after setting %d",SETBIT(n,pos));
}
-3
A
ответ
0
Для функций *scanf
, спецификатор преобразования d
предполагает, что его соответствующий параметр имеет тип int *
; если это не так, то это undefined, и в значительной степени любой результат возможен.
Если вы хотите использовать char
для pos
и n
, то вы должны использовать %hhd
вместо %d
в scanf
вызова.
+0
Пока что вывод такой же. – rin92
'scanf ("% d ", &n);' спецификатор формата не соответствует типу данных, а другой 'scanf' тоже. –
' scanf ("% d", & n) 'с' char n' yields undefined поведение. Аналогично для 'scanf («% d », & pos)'. На практике 'scanf' записывает 4 байта данных в переменную размером 1 байт (хотя эти размеры вообще не продиктованы стандартом языка, это на большинстве платформ) .Вы должны решить, какой тип данных вы хотите сканировать с клавиатуры. С '"% d "' - используйте 'int'. Для' char' - use '"% c "'. –
Пожалуйста, отправьте форматированный код –