请问个移位赋值的问题,谢谢!
今天遇到到了这种事:
说明:
UINT8-> 无符号8位;
UINT16-> 无符号16位;
问题:
UINT8 *temp_p = NULL; /* malloc 一段空间,并赋值了的 */
UINT16 temp;
*temp_p = 0x10 = 128;
请问下面操作的值是多少:
temp = *temp_p < < 1;
我认为是temp = 0;
但是实际的结果temp = 256;
这是为哈呢?
[解决办法]
.....128 * 2是等于256吧
左移一位等于×2
*temp_p = 0x10 = 128;这样写*temp_p里面被赋值为128
[解决办法]
*temp_p = 0x10 = 128;这样写*temp_p里面被赋值为128
这样写可以么?疑惑ing。。。。。
[解决办法]
*temp_p = 0x10 = 128;
这句应该编译出错
[解决办法]
我认为是temp = 0;
但是实际的结果temp = 256;
这是为哈呢?
--------------------------
lz认为temp = 0;估计是认为*temp_p的类型是UINT8,所以256(0x100)放到一个UINT8中会溢出为0;但是,实际上,C语言中很多算术操作都会执行integer promotion,也就是向int提升。
所以,*temp_p < < 1 这一表达式中的*temp_p实际上按照int的0x10来左移一位,并赋值给temp,所以temp = 256。
[解决办法]
我也认为 *temp_p = 0x10 = 128; 是错的。
operator = 是右结合的。
[解决办法]
[quote]*temp_p = 0x10 = 128;
这句应该编译出错[\quote]
我觉得也是
[解决办法]
学习中,请问UINT8和UINT16是在哪里定义的,要包含哪个头文件才可以