C 当变量类型不同时,为什么下面的代码给出不同的输出? //当i/p为16,2为4,如果变量为int,则o/p为20; #定义SETBIT(A,B)A | 1
对于C 当变量类型不同时,为什么下面的代码给出不同的输出? //当i/p为16,2为4,如果变量为int,则o/p为20; #定义SETBIT(A,B)A | 1,c,char,int,bit,C,Char,Int,Bit,对于*scanf函数,d转换说明符期望其相应参数具有类型int*;如果不是这样,那么行为是未定义的,几乎任何结果都是可能的 如果要对pos和n使用char,则必须在scanf调用中使用%hhd而不是%d scanf(“%d”和&n)格式说明符与数据类型不匹配,另一个scanf也不匹配。scanf(“%d”,&n)与char n一起产生未定义的行为。同样适用于scanf(“%d”和&pos)。实际上,scanf将4个字节的数据写入一个大小为1字节的变量(虽然这些大小通常不受语言标准的限制,但在大多
*scanf
函数,d
转换说明符期望其相应参数具有类型int*
;如果不是这样,那么行为是未定义的,几乎任何结果都是可能的
如果要对
pos
和n
使用char
,则必须在scanf
调用中使用%hhd
而不是%d
scanf(“%d”和&n)
格式说明符与数据类型不匹配,另一个scanf
也不匹配。scanf(“%d”,&n)
与char n
一起产生未定义的行为。同样适用于scanf(“%d”和&pos)
。实际上,scanf
将4个字节的数据写入一个大小为1字节的变量(虽然这些大小通常不受语言标准的限制,但在大多数平台上都是这样)。您需要决定要从键盘扫描哪种类型的数据。使用“%d”
-使用int
。对于char
-使用“%c”
。请提交格式化的code@WeatherVane我想你的意思是|1@WeatherVane所有宏参数都应在宏中加括号。SETBIT(1,2 | 4)
的结果可能与SETBIT(1,6)
的结果不同,但输出仍然相同。
//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));
}