ruby中printf "%x"%-4为何会打印开头..

    先看一下ruby中printf "%x" % -4的返回结果:

irb(main):134:0> printf "%x\n" % -4
..fc

前面的..是神马东东???看了matz的文章略知了一二.

    在ruby中如果是x86则Fixnum是32位,如果是x64则Fixnum是64位,超过长度的数字会变为Bignum.在Bignum内部,分别保存符号和绝对值,绝对值以整数数组形式存放,数组的元素是若干32位无符号整数.而Bignum符号另外保存,与Fixnum不同,内部没有采用2的补码,但位运算表面上好像是采用了2的补码.对于ruby的位运算,负整数的左侧貌似是无限多的1,所以前面的f前面的..符号表示无限多个1啊!

     正如matz所说:这谜一般的..字符串,那闲的蛋疼的猫...

你可能感兴趣的:(Ruby,BigNum,Fixnum)