读书人

请教个移位赋值的有关问题多谢

发布时间: 2012-02-22 19:36:55 作者: rapoo

请问个移位赋值的问题,谢谢!
今天遇到到了这种事:

说明:
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是在哪里定义的,要包含哪个头文件才可以

读书人网 >C语言

热点推荐