~0って何?
何か見たこと無いのが出た。
% perl -le 'print ~0' 4294967295 % perl -le '$hoge = ~0; print $hoge' 4294967295 % perl -le '$hoge = ~1; print $hoge' 4294967294 % perl -le '$hoge = ~2; print $hoge' 4294967293 % perl -le '$hoge = ~3; print $hoge' 4294967292
何だこれは。
% perldoc perlop Symbolic Unary Operators Unary "~" performs bitwise negation, i.e., 1’s complement. For example, "0666 & ~027" is 0640. (See also "Integer Arithmetic" and "Bitwise String Operators".) Note that the width of the result is platform-dependent: ~0 is 32 bits wide on a 32-bit plat- form, but 64 bits wide on a 64-bit platform, so if you are expecting a certain bit width, remember to use the & operator to mask off the excess bits. Integer Arithmetic Used on numbers, the bitwise operators ("&", "│", "^", "~", "<<", and ">>") always produce integral results. (But see also "Bitwise String Operators".) However, "use integer" still has meaning for them. By default, their results are interpreted as unsigned integers, but if "use integer" is in effect, their results are interpreted as signed integers. For example, "~0" usu- ally evaluates to a large integral value. However, "use integer; ~0" is "-1" on twos-complement machines.
斜め読み
- 1の補数だそうだ
- 結果はプラットフォームに依存するよ
- 32bit環境と64bitでは値が違うよ
- 確実なビット長が知りたいなら & オペレータでマスクオフれ
- use integer;とかno integer;がどうとか