elh*_*efe 3 perl 64-bit integer
我对perl中64位整数的内部表示感到困惑.
Ubuntu 12.04,perl 5.16.0:
print 18440000000000001000 . "\n";
print 18450000000000001000 . "\n";
print -9220000000000001000 . "\n";
print -9230000000000001000 . "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
18440000000000001000
1.845e+19
-9220000000000001000
-9.23e+18
Run Code Online (Sandbox Code Playgroud)
显然正数溢出并被强制浮动,相应的精度损失,在2 ^ 64.但是 - 没有留下符号位的空间,那么负数高达-2 ^ 63的情况如何?
Perl数字表示为a IV或a UV.它是SV结构本身的旗帜.
我猜测一个号码签名后会UV变成一个IV,反之亦然.
具体来说,查看SV定义:
#define _SV_HEAD_UNION \
union { \
char* svu_pv; /* pointer to malloced string */ \
IV svu_iv; \
UV svu_uv; \
SV* svu_rv; /* pointer to another SV */ \
SV** svu_array; \
HE** svu_hash; \
GP* svu_gp; \
PerlIO *svu_fp; \
} sv_u
Run Code Online (Sandbox Code Playgroud)
该SvIOK和SvUOK标志可以用来看看的实际有效的领域SV是.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |