参考答案:
【问题1】,
①a |=BIT5
②a &=~BIT5
【问题2】
出错原因:
在宏定义中,参数a使用两次,而在引用宏时,使用了i++,从而导致出错。
①i
②i++或i=i+1或++i或i+=1
【问题3】
第一次输出:0x1234,0x12
第二次输出:0x12345555,0x12
第三次输出:0x 12aa5555,0x5555
详细解析:
【问题1】
根据define BIT5 (0X01 <<5) ,宏定义的是将0x01左移5位,为0001 0000。在函数set_bit5中,用位或赋值操作(|=)设置变量a的第5位,在函数clear_bit5中,用位与赋值操作(&=)清除变量a的第5位。所以,用a | = BIT5将a的第5位置1,其他位不变,a &=~BIT5将a的第5位置0,其他位不变。
【问题2】
在C语言中采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。
将宏替换后,计算平方的语句为result=SQUARE((i++) * (i++)),很明显这个语句是错误的,因为i++执行了2次,结构肯定是会不正确的。
【问题3】
小端模式是指数据的高位保存在内存的高地址中,而数据的低位则保存在内存的低地址中。
大端模式是指数据的高位保存在内存的低地址中,而数据的低位,保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放。