On Thu, 7 Apr 2022 18:23:50 GMT, Paul Sandoz <psan...@openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/Integer.java line 1781:
>> 
>>> 1779:      * All the upper remaining bits of the compressed value are set
>>> 1780:      * to zero.
>>> 1781:      *
>> 
>> Following Alan's comment, I suggest the following examples:
>> 
>> 
>>   compress(0x9ABCDEF, 0x0F0F0FF) == 0xACEF
>>   compress(x, 1<<n) == (x>>n & 1)
>>   compress(x, -1<<n) == x >>> n
>>   compress(m, m) == (m==-1||m==0)? m : (1<<bitCount(m))-1
>>   compress(x, m) == compress(x & m, m)
>>   compress(expand(x, m), m) == x & compress(m, m)
>>   (compress(x, m) >>> n) & 1 == /*the bit of x corresponding to the nth set 
>> bit in m*/
>> 
>> 
>> …In two places.  Similarly, examples for expand:
>> 
>> 
>>   expand(0x9ABCDEF, 0x0F0F0FF) == 0xC0D0EF
>>   expand(x, 1<<n) == (x&1) << n
>>   expand(x, -1<<n) == x << n
>>   expand(-1, m) == m
>>   expand(x, m) == expand(x, m) & m
>>   expand(compress(x, m), m) == x & m
>>   expand(1<<n, m) == /*the nth set bit in m, as a mask in place; cf. 
>> highest/lowestOneBit*/
>> 
>> 
>> (Please double check these examples!)
>
> Examples added in latest commit.

I see you've added a comment on each example too, I think this really helpers 
readers to see how they can be used.

The class description of both Integer and Long have an implementation note 
(they pre-date @implNote) referencing Hacker's Delight. We could potentially 
expand the list of methods mentioned but it's not strictly necessary are they 
are just examples.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8115

Reply via email to