首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php扩展>> bug

php扩展>> bug
EN

Stack Overflow用户
提问于 2017-08-08 03:14:27
回答 1查看 142关注 0票数 0

为了编写PHP扩展,我在其中使用了>>,但意外的是它出错了。

代码:

代码语言:javascript
复制
printf("%08x ", (W[16]));
printf("%08x ", (W[16]) >> 17);
printf("%08x ", 2425545216 >> 17);

结果:

代码语言:javascript
复制
9092e200 40c04849 00004849

注:

W[16]=0x9092e200 = 2425545216,在c中,代码工作正常。但是在php扩展中,>>没有将0填充到左侧。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 04:06:51

在C中,对有符号整数的按位右移操作的结果是实现定义的。例如,请参见this question的答案。

0x9092e200可以解释为无符号整数2425545216以及有符号整数-1869422080。例如,下面的代码输出-1869422080 2425545216

代码语言:javascript
复制
int x = 0x9092e200;
printf("%d %d",  x, (unsigned)x);

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

代码语言:javascript
复制
printf("%08x ",  ((unsigned int)W[16]) >> 17); 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45558698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档