Issue #12753 has been updated by Shugo Maeda.


Yui NARUSE wrote:
> Herwin W wrote:
> > ```ruby
> > if n.bittest?(0b10100000)
> > ```
> > 
> > If I encountered that code without having the context of this case, I wouldn't know what what the equivalent behaviour would be:
> > 
> > ```ruby
> > if n & 0b10100000 != 0           #=> Is at least one bit of the argument set?
> > if n & 0b10100000 == 0b10100000  #=> Are all the bits of the argument set?
> > ```
> 
> Above one.

IBM InfoSphere and MS FoxPro have BITTEST(), but its second argument is the bit position
to be tested.

http://www.ibm.com/support/knowledgecenter/SSZJPZ_11.3.0/com.ibm.swg.im.iis.ds.basic.doc/topics/r_dsbasic_BITTEST_function.html
https://msdn.microsoft.com/en-us/library/aa977348(v=vs.71).aspx

This behavior seems to fit the name bittest, compared to the proposed one.


----------------------------------------
Feature #12753: Useful operator to check bit-flag is true or false
https://bugs.ruby-lang.org/issues/12753#change-61821

* Author: Satoshi TAGOMORI
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
Ruby's 0 is truthy value. It's useful for many cases, but it's confusing and I made many bugs when I'm writing code to handle binary data, because my thought is almost same with one to write C code in such situation.

```ruby
n = get_integer_value
if n & 0b10100000
  # code for the case when flag is true
else
  # never comes here :(
end
```

IMO it's very useful to have methods for such use-cases, like `#and?` and `#xor?` (`#or?` looks not so useful... I can't imagine the use case of this operator, but it's better to have for consistency).

```ruby
n = get_integer_value
case
when n.and?(0b10000000)
  # negative signed char
when n.and?(0b01110000)
  # large positive
else
  # small positive
end
```




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>