*(unsigned int *)GPIOB与*(unsigned int *)(GPIOB),为什么前者报“表达式必须是可修改的左值”的错误?
更新时间:2021-09-19 03:11:23 • 作者:DERRICK •阅读 7544
- c语言 指针问题 ?unsigned int * p = (unsigned int * ) 2048
- #define uint unsigned int uint x,y; 此时为什么x为unsigned int型 而y为什么不是? 求大神求解
- unsigned int 和 int的问题
- c51数据类型,unsigned int和unsigned char是不是可以随意替换(因为都是8位的)
c语言 指针问题 ?unsigned int * p = (unsigned int * ) 2048
unsigned int *p 表示定义变量unsigned int类型的指针变量p
(unsigned int * ) 2048 表示把2048转换为unsigned int指针类型,默认情况下2048为整型
这样一来2048就可以表示一个地址了,然后再赋值给p
#define uint unsigned int uint x,y; 此时为什么x为unsigned int型 而y为什么不是? 求大神求解
看一下uint x; uint y;可不可行,按理说如果uint没有定义过,你的这种写法是没有问题的。
unsigned int 和 int的问题
首先你要明白 unsigned 和 signed的区别,unsigned的表示范围比signed大一倍,只有正数,而signed的最高位用0,1来区分正数,负数 。
这里%d代表打印10进制数,第一个printf d+c=-14 所以打印-14 应该能理解,没问题吧?
第2个printf c+d>16 这里是个关系表达式,如果成立,值为1,否则为0 而c和d却1个是unsigned,1个是signed,在这种关系表达式里面,相加的结果随后面一个数的类型,所以加之前就会把int变为unsigedint,因为16是unsigned,所以c被转化为unsigned了,singed转unsigned怎么转的这里就不详细去讲了,去看看计算机原理里面的原码,反码,补码是怎么回事就好,c+d>26 值为真,为1,所以打印1.
c51数据类型,unsigned int和unsigned char是不是可以随意替换(因为都是8位的)
不能替换,unsigned int是2个字节,16位,unsigned char 是一个字节,8位
j最大只需要255,那么一个字节就能表示了,i如果是char的话,那么最大也只能是255,那么循环的次数太少了,达不到延时的要求,所以改成int,最大可以到65535。