php数组过滤掉负数,php – 为什么在这个数组中减去NULL不是负数?

使用源,卢克

像往常一样,答案在于源头。 PHP在内部使用以下两个函数来执行增量和减量操作:

这些操作根据其类型修改op1参数(NULL是一个类型);里面的increment_function()可以看到下面的分支in the code:

case IS_NULL:

ZVAL_LONG(op1, 1);

break;

上面的代码将op1的类型更改为一个数字,并将其值设置为1。

相反,decrement_function()不提供这样的分支,因此将执行default action:

default:

return FAILURE;

运行此代码实际上不会产生任何可观察到的失败,因为返回值被吸收在Zend VM中,但该变量绝对不会更新。

这不是一个错误(tm)

你可能会惊讶地知道,这种行为,包括布尔值,实际上是documented:

Note: The increment/decrement operators do not affect boolean values. Decrementing NULL values has no effect too, but incrementing them results in 1.

关于布尔:

$a = true;

var_dump($a--); // true

$a = false;

var_dump($a++); // false

关于字符串:

$letter = 'A';

var_dump(++$letter); // B

var_dump(--$letter); // B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将16进制数转换为十进制数,有几种方法可以处理负数的情况。引用中提到了两种方法。 方法1:对于正数,直接将值转换为16进制即可。对于负数,需要将负号后面的值减去128,然后转换为16进制,并与0x80进行或运算。例如,对于-49,负号后面的值是49,128-49=79,79转换为16进制是0x4f,0x4f与0x80进行或运算得到0xcf。 方法2:对于负数,先将其转换为对应的正数形式,然后再进行16进制转换。例如,对于-20,先将其转换为对应的正数形式,即256-20=236,再将236转换为16进制形式,得到EC。 所以,对于16进制转换为十进制的负数,可以根据以上两种方法进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [十六进制和十进制有符号数转换](https://blog.csdn.net/happygrilclh/article/details/106194107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [16进制转10进制负值问题解决方案](https://blog.csdn.net/JUNY_JAVA/article/details/108145759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [十六进制数据转换十进制时区别正负值(Python)](https://blog.csdn.net/huanxiajioabu/article/details/131281933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值