function cntBitly64(Z: Int64): Integer;
const
digits:array[0..62] of integer =(
1{0-1},1{1-3},1{2-7},
1{*3-15},2{4-31},2{5-63},
2{*6-127},3{7-255},3{8-511},
3{*9-1023},4{10-2047},4{11-4095},4{12-8191},
4{*13-16383},5{14-32767},5{15-65535},
5{*16-131071},6{17-262143},6{18-524287},
6{*19-1048575},7{20-2097151},7{21-4194303},7{22-8388607},
7{*23-16777215},8{24-33554431},8{25-67108863},
8{*26-134217727},9{27-268435455},9{28-536870911},
9{*29-1073741823},10{30-2147483647},10{31-4294967295},10{32-8589934591},
10{*33-17179869183},11{34-34359738367},11{35-68719476735},
11{*36-137438953471},12{37-274877906943},12{38-549755813887},
12{*39-1099511627775},13{40-2199023255551},13{41-4398046511103},13{42-8796093022207},
13{*43-17592186044415},14{44-35184372088831},14{45-70368744177663},
14{*46-140737488355327},15{47-281474976710655},15{48-562949953421311},
15{*49-1125899906842623},16{50-2251799813685247},16{51-4503599627370495},16{52-9007199254740991},
16{*53-1801439850948198},17{54-36028797018963967},17{55-72057594037927935},
17{*56-144115188075855871},18{57-288230376151711743},18{58-576460752303423487},
18{*59-1152921504606846975},19{60-2305843009213693951},19{61-4611686018427387903},19{62-9223372036854775807}
);
limits:array[0..62] of Int64 =(
99{0-1},99{1-3},99{2-7},
10{*3-15},999{4-31},999{5-63},
100{*6-127},9999{7-255},9999{8-511},
1000{*9-1023},99999{10-2047},99999{11-4095},99999{12-8191},
10000{*13-16383},999999{14-32767},999999{15-65535},
100000{*16-131071},9999999{17-262143},9999999{18-524287},
1000000{*19-1048575},99999999{20-2097151},99999999{21-4194303},99999999{22-8388607},
10000000{*23-16777215},999999999{24-33554431},999999999{25-67108863},
100000000{*26-134217727},9999999999{27-268435455},9999999999{28-536870911},
1000000000{*29-1073741823},99999999999{30-2147483647},99999999999{31-4294967295},99999999999{32-8589934591},
10000000000{*33-17179869183},999999999999{34-34359738367},999999999999{35-68719476735},
100000000000{*36-137438953471},9999999999999{37-274877906943},9999999999999{38-549755813887},
1000000000000{*39-1099511627775},99999999999999{40-2199023255551},99999999999999{41-4398046511103},99999999999999{42-8796093022207},
10000000000000{*43-17592186044415},999999999999999{44-35184372088831},999999999999999{45-70368744177663},
100000000000000{*46-140737488355327},9999999999999999{47-281474976710655},9999999999999999{48-562949953421311},
1000000000000000{*49-1125899906842623},99999999999999999{50-2251799813685247},99999999999999999{51-4503599627370495},99999999999999999{52-9007199254740991},
10000000000000000{*53-18014398509481983},999999999999999999{54-36028797018963967},999999999999999999{55-72057594037927935},
100000000000000000{*56-144115188075855871},9223372036854775807{57-288230376151711743},9223372036854775807{58-576460752303423487},
1000000000000000000{*59-1152921504606846975},9223372036854775807{60-2305843009213693951},9223372036854775807{61-4611686018427387903},9223372036854775807{62-9223372036854775807}
);
var
vbsr: Cardinal;
begin
vbsr := BsrQWord(Abs(Z));
Result := digits[vbsr];
if z>=limits[vbsr] then
inc(Result);
end;