php 扩展 >> 错误

堕落.lu

为了编写一个 PHP 扩展,我>>在其中使用了它,但出乎意料地出错了。

代码:

printf("%08x ", (W[16]));
printf("%08x ", (W[16]) >> 17);
printf("%08x ", 2425545216 >> 17);

结果:

9092e200 40c04849 00004849

笔记:

W[16]=0x9092e200 = 2425545216, 在 c 中,代码工作正常。但是在 php 扩展中,>>不要向左填充 0。

php_version: PHP: 7.1.7 感谢您的帮助。

鲁斯兰·奥斯曼诺夫

在 C 中,对有符号整数进行按位右移运算的结果是实现定义的。例如,请参阅此问题的答案

该值0x9092e200可以解释为无符号整数2425545216和有符号整数-1869422080例如,以下代码输出-1869422080 2425545216

int x = 0x9092e200;
printf("%d %d",  x, (unsigned)x);

因此,如果您想用零填充空位,请强制转换W[16]为无符号,例如:

printf("%08x ",  ((unsigned int)W[16]) >> 17); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章