发布网友
共4个回答
热心网友
最外层括号是给预处理程序看的,让程序在预处理时把((uint) 0x00)看作一个整体, 内层括号的意思是将0x00(有符号类型)强制转换为无符号类型。
如果有一个语句 int x = IN_OUT_PUT_M1 ,预处理后的结果就是 int x = (uint) 0x01, 至于为什么这么写?我也不清楚。可能是这个系统不允许接收负数,为了安全起见。因为你如果定义了
# define IO_IN_OUT_PUT_M1 ((uint) -1) (假设是8位int类型),那么程序在编译后的真正结果应该是255。
至于为什么用16进制数,当然是为了方便。例如:0x01,对应着二进制数 0000 0001,0x0f = 0000 1111 0xff = 1111 1111 每位16进制位,对应4位二进制位。这在写底层的时候太直观了。
热心网友
强制类型转换运算,将后面的常量强制转换为unsigned int类型
热心网友
#define定义宏,宏就是替换,这里宏名就是IO_IN_OUT_PUT_M0和IO_IN_OUT_PUT_M1。
你在代码里写宏名,预编译时会将代码里的宏名替换成后面对应的内容。
这里有没有括号,宏名对应的值都是一样的,区别就是替换的时候带不带括号。
比如,在一个公式中(1+2)*3和1+2*3 结果会有区别,那么我定义宏#define M 1+2和#define M (1+2),替换后明显影响运算结果。
后面16进制数,就是0个1,在这里应表示的是IO口对应的两种状态。
热心网友
你不会连“强制类型转换”这个概念都没听说过吧?