【问题标题】:unsigned tinyint in php?php中的无符号tinyint?
【发布时间】:2011-02-13 21:21:34
【问题描述】:

我正在研究一个在 php 中操作 html 十六进制颜色代码的类。在内部,该类将 RGB 值视为小数。当我添加或减去时,我从不希望该值超过 255,也不希望“低于”零。

当然,我可以做一些零碎的事情,比如

if ( $val >  255 ) {
    $val = 255;
} 
if ( $val < 0 ) {
    $val = 0;
}

但这很冗长:P

有没有一种聪明的单线方法可以让值保持在 0 到 255 之间?

【问题讨论】:

    标签: php types integer


    【解决方案1】:

    你可以这样说: $val = max(0, min(255, $val));

    【讨论】:

      【解决方案2】:

      使用bitwise OR operator 会起作用

      if(($num | 255) === 255) { /* ... */ }
      

      例子:

      foreach (range(-1000, 1000) as $num) {
          if(($num | 255) === 255) {
              echo "$num, ";
          };
      }
      

      将打印出从 0 到 255 的所有数字。

      【讨论】:

      • 为什么要麻烦 ORing?一个简单的$var &amp;= 0xFF 会将值屏蔽为 0-255 范围
      • @MarcB 使用 OR 有什么烦恼
      • Marc B 的回答很有道理 - 我不明白 Gordon 想要达到的目标。
      • @symcbean 使用 $var &amp;= 0xFF 翻转值与 OR'ing $num 以验证它在 0 到 255 之间(这是我的代码所做的)一样有意义。这两种方法都不等同于 OPs if 块,@Narcissus 已经给出了单线,而是解决问题的替代方法。
      • @gordon。对不起,错字。意思是“为什么要打扰”。但考虑到这个过滤后的数字可能需要在其他地方使用。您的版本保证最大为 255,但也强制所有内容为 255。使用按位 AND 使数字处于可用状态。
      【解决方案3】:

      或者你可能是那个使用嵌套三元运算符的人。

      例如。

      ( ($num > 255) ? 255 : ( ($num < 0) ? 0 : $num) )
      

      【讨论】:

      • 嵌套的三元算子只是为了激发个人兴趣。
      • 他们要求一个聪明的单行代码,我认为这满足了这个定义(除了你需要包含的额外的文档行)
      • @Jonathan 我会一直陪着你。如果我能给出不止一分的话。
      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2018-01-14
      • 2020-01-30
      • 2013-12-07
      • 2016-11-28
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多