рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдЕрдзреНрдпрдпрди,
"GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдирд╛" рдЕрдЪрд╛рдирдХ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ, рдореЗрд░рд╛
рдЬрд╡рд╛рдм рд▓рдЧрднрдЧ рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ рдмрдЧ рд╣реИред
рдПрдХ рдмрд╛рд░ рдХреА рдмрд╛рдд рд╣реИ ...
2010 рдореЗрдВ рд╡рд╛рдкрд╕, рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдмреИрдард╛ рдерд╛ рдФрд░ рдмрдХрд╡рд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛: рдореИрдВ
рдХреЛрдб рдЧреЛрд▓реНрдлрд┐рдВрдЧ рдХрд╛
рд╢реМрдХреАрди рдерд╛ рдФрд░ рд╕реНрдЯреИрдгреНрдб рдУрд╡рд░рдлреНрд▓реЛ рдореЗрдВ
рдПрдХ рд░реЗрдЯрд┐рдВрдЧ
рдЬреЛрдбрд╝реА ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдиреЗ рдореЗрд░рд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛: рдмрд╛рдЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдпрд╛рдиреА 123456789 рдмрд╛рдЗрдЯ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ тАЬ123.5 MBтАЭ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред
рдЧреБрдб рдУрд▓реНрдб 2010 рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдзрдиреНрдпрд╡рд╛рдж рд╡реЗрдмреИрдХ рдорд╢реАрдирдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдЙрдЪрд┐рдд рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде 1 рдФрд░ 999.9 рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреАред
рд▓реВрдк рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЬрд╡рд╛рдм рдерд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЗрдХрд╛рдИ (рдИрдмреА = 10
18 рдмрд╛рдЗрдЯреНрд╕) рд╕реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреА (рдмреА = 1 рдмрд╛рдЗрдЯ) рддрдХ рд╕рднреА рдбрд┐рдЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИред рдЫрджреНрдо рдХреЛрдб рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
suffixes = [ "EB", "PB", "TB", "GB", "MB", "kB", "B" ] magnitudes = [ 10^18, 10^15, 10^12, 10^9, 10^6, 10^3, 10^0 ] i = 0 while (i < magnitudes.length && magnitudes[i] > byteCount) i++ printf("%.1f %s", byteCount / magnitudes[i], suffixes[i])
рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рдкрдХрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╢рдмреНрджрдЬрд╛рд▓ рдореЗрдВ, рдЗрд╕реЗ
рдкрд╢реНрдЪрд┐рдо рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╢реВрдЯрд░ рдХреА
рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЬрд╡рд╛рдм рдореЗрдВ рдХрдИ рдЦрд╛рдорд┐рдпрд╛рдВ рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕рд╕реЗ рдкрд╛рд░ рдкрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред рдХрдо рд╕реЗ рдХрдо рд▓реВрдк рд╡рд╛рд▓рд╛ рдХреЛрдб рдмрд╣реБрдд рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЦреИрд░ рдпрд╣ рдмреАрдЬрдЧрдгрд┐рдд рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ!
рдлрд┐рд░ рдпрд╣ рдореБрдЭ рдкрд░ рдЫрд╛ рдЧрдпрд╛ред рдЙрдкрд╕рд░реНрдЧ рдХрд┐рд▓реЛ рд╣реИрдВ-, рдореЗрдЧрд╛-, рдЧреАрдЧрд╛-, ... - рдбрд┐рдЧреНрд░реА 1000 (рдпрд╛ рдЖрдИрдИрд╕реА рдорд╛рдирдХ рдореЗрдВ 1024) рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╣реА рдЙрдкрд╕рд░реНрдЧ рдХреЛ рд▓рдШреБрдЧрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЪрдХреНрд░ рдирд╣реАрдВред
рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛:
public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); }
рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рд▓реЙрдЧ / рдкреЙрд╡ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рджрдХреНрд╖рддрд╛ рдореЗрдВ рдиреАрдЪ рд╣реИред рд▓реЗрдХрд┐рди рд▓реВрдк рдирд╣реАрдВ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИред
рдЧрдгрд┐рдд рд╕рд░рд▓ рд╣реИ ред рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╛рдЗрдЯрдХрд╛рдЙрдВрдЯ = 1000 рдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрд╕ рдбрд┐рдЧреНрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рдмрд╛рдЗрдирд░реА рдиреЛрдЯреЗрд╢рди рдореЗрдВ, рдмреЗрд╕ 1024 рд╣реИред) рд╕рдорд╛рдзрд╛рди рдПрд╕ = рд▓реЙрдЧ 1000 (рдмрд╛рдЗрдЯрдХрд╛рдЙрдВрдЯ) рджреЗрддрд╛ рд╣реИред
рдПрдкреАрдЖрдИ рдореЗрдВ рдХреЛрдИ рд╕рд░рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реЙрдЧ 1000 рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдШреБрдЧрдгрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрд╕ = рд▓реЙрдЧ (рдмрд╛рдЗрдЯрдХрд╛рдЙрдВрдЯ) / рд▓реЙрдЧ (1000)ред рддрдм рд╣рдо рдПрд╕ рдХреЛ рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ (рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдирд╣реАрдВ) рд╣реИ, рддреЛ рдПрдордмреА рдХреЛ рдорд╛рдк рдХреА рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрджрд┐ s = 1 рд╣реИ, рддреЛ рдЖрдпрд╛рдо рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╣реИ, рдпрджрд┐ s = 2 - рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ред 1000 рд╕реЗ рдмрд╛рдЗрдЯ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдХреНрд╖рд░ рдХреЛ рдердкреНрдкрдбрд╝ рдорд╛рд░реЗрдВред
рдЬреЛ рдХреБрдЫ рднреА рд╢реЗрд╖ рдерд╛, рд╡рд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рд╕рдореБрджрд╛рдп рдиреЗ рдЙрддреНрддрд░ рдХреЛ рдХреИрд╕реЗ рдорд╛рдирд╛ред рдореИрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред
рдПрдЯреНрд░рд┐рдмреНрдпреВрд╢рди рд╕реНрдЯрдбреА
2018 рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗред рдЧреНрд░реЗрдЬреБрдПрдЯ рд╕реНрдЯреВрдбреЗрдВрдЯ рд╕реЗрдмреЗрд╕реНрдЯрд┐рдпрди рдмрд╛рд▓реНрдЗрдЯреНрд╕ рдиреЗ
"GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЕрдЯреИрдЪрдореЗрдВрдЯ
" рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкрддреНрд░рд┐рдХрд╛
Empirical Software Engineering рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд
рдХрд┐рдпрд╛ рд╣реИ ред рдЙрдирдХреЗ рд╢реЛрдз рдХрд╛ рд╡рд┐рд╖рдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╕реАрд╕реА рдмреАрд╡рд╛рдИ-рдПрд╕рдП 3.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХрд╛ рдХрд┐рддрдирд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рд▓реЗрдЦрдХ рдХреЛрдб рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд▓рд┐рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ
рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдбрдВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдФрд░ рдХреЛрдб рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧрд┐рдЯрд╣рдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╕рд╛рд░ рд╕реЗ рдЙрджреНрдзрд░рдг:
рд╣рдо рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧрд┐рдЯрд╣рдм (рдЬреАрдПрдЪ) рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрд╕рдУ рдЙрддреНрддрд░реЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рдЧреИрд░-рддреБрдЪреНрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рд░реЛрдкрдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред
(Spoiler: рдирд╣реАрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред
рд▓реЗрдЦ рдореЗрдВ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
3758880 рдХреЗ рд╕рд╛рде рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдЙрддреНрддрд░ рдореБрдЭреЗ рдЖрда рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░ рдерд╛ред рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд▓рд╛рдЦ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдПрдХ рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд▓рд╕ рд╣реИрдВред
GitHub рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб
humanReadableByteCount
рд╕рд╛рде рд╣рдЬрд╛рд░реЛрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИред

рдЕрдкрдиреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдЗрд╕ рдЕрдВрд╢ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ:
$ git grep humanReadableByteCount
рдПрдХ рдордЬреЗрджрд╛рд░ рдХрд╣рд╛рдиреА , рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред
рд╕реЗрдмреЗрд╕реНрдЯрд┐рдпрди рдХреЛ OpenJDK рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдЯреЗрдВрд╢рди рдХреЗ рдореИрдЪ рдорд┐рд▓рд╛, рдФрд░ OpenJDK рд▓рд╛рдЗрд╕реЗрдВрд╕ CC BY-SA 3.0 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред Jdk9-dev рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреВрдЫрд╛: рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛрдб OpenJDK рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд?
рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдУрд░реЗрдХрд▓ рдореЗрдВ OpenJDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкреВрд░реНрд╡ рд╕рд╣рдпреЛрдЧреА рдФрд░ рдорд┐рддреНрд░ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрд╛ рд╣реИ:
рд╣реИрд▓реЛ,
рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ SO (aioobe) рдкрд░ рд╕реАрдзреЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкреВрдЫреЗрдВ? рд╡рд╣ OpenJDK рдХрд╛ рд╕рджрд╕реНрдп рд╣реИ рдФрд░ Oracle рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХреЛрдб OpenJDK рд╕реНрд░реЛрдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
рдУрд░реЗрдХрд▓ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдмрд╣реБрдд рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓реЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЛ рд░рд╛рд╣рдд рдорд┐рд▓реА рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдЙрддреНрддрд░ рдХреЛ рдкрдврд╝рд╛ рдФрд░ "рджреЛрд╖реА" рдкрд╛рдпрд╛ред
рддрдм рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдиреЗ рдореБрдЭреЗ рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛, рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛: рдУрд░реЗрдХрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдХрдорд┐рдЯрдореЗрдВрдЯ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рдерд╛ред рдУрд░реЗрдХрд▓ рдХреЗ рд╕рд╛рде рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдмрд╛рдж , рдпрд╣ рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
рдмрдЧ
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ред рдХреЛрдб рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рд╣реИ?
рдПрдХ рдмрд╛рд░ рдлрд┐рд░:
public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); }
рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИрдВ?
рдПрдХреНрд╕рд╛рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рдж (10
18 ) рдЬрд╝реЗрдЯрд╛рдмрд╛рдЗрдЯреНрд╕ (10
21 ) рд╣реИрдВред рд╢рд╛рдпрдж рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ kMGTPE рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рдЬрд╛рдПрдЧреА? рдирд╣реАрдВред рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп 2
63 -1 ├Ч 9.2 ├Ч 10
18 рд╣реИ , рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдореВрд▓реНрдп рдХрднреА рднреА рдПрдХреНрд╕реИрдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред
рд╢рд╛рдпрдж рдПрд╕рдЖрдИ рдЗрдХрд╛рдЗрдпреЛрдВ рдФрд░ рдмрд╛рдЗрдирд░реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреАрдЪ рднреНрд░рдо? рдирд╣реАрдВред рдЙрддреНрддрд░ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреНрд░рдо рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рддрдп рд╣реЛ рдЧрдпрд╛ рдерд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдк рдЬрд╝реАрд░реЛрдЗрдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ charAt (exp-1) рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдП? рдирд╣реАрдВ, рдпрд╛ рддреЛред рдпрджрд┐ рдкрд╣рд▓рд╛ рдмрдпрд╛рди рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХреНрд╕рдкреЗрдХреНрдЯ рд╡реИрд▓реНрдпреВ рд╣рдореЗрд╢рд╛ рдХрдо рд╕реЗ рдХрдо 1 рд╣реЛрдЧреАред
рд╢рд╛рдпрдж рдкреНрд░рддреНрдпрд░реНрдкрдг рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рдЧреЛрд▓ рддреНрд░реБрдЯрд┐? рдЦреИрд░, рдЖрдЦрд┐рд░рдХрд╛рд░ ...
рдХрдИ рдирд╛рдЗрди
рд╕рдорд╛рдзрд╛рди 1 рдПрдордмреА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
"1000,0 kB"
рдмрд╛рдЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо (SI рдореЛрдб рдореЗрдВ)
"1000,0 kB"
ред рд╣рд╛рд▓рд╛рдБрдХрд┐ 999,999 1000 ├Ч 1000
1 рд╕реЗ 999.9 ├Ч 1000
1 рдХреЗ рдХрд░реАрдм рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ 1000 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо
"1.0 MB"
ред
рдЕрдкрдиреЗ рдмрдЪрд╛рд╡ рдореЗрдВ, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдРрд╕реА рддреНрд░реБрдЯрд┐ рд╕рднреА 22 рдкреНрд░рдХрд╛рд╢рд┐рдд рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рдереА, рдЬрд┐рд╕рдореЗрдВ рдЕрдкрд╛рдЪреЗ рдХреЙрдордиреНрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рдереЗред
рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдШрд╛рддрд╛рдВрдХ (рдПрдХреНрд╕рдк) рдХреЛ 'рдХреЗ' рд╕реЗ 'рдПрдо' рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рд╣реА рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 ├Ч 1,000
2 (1 рдПрдордмреА) рдХреЗ рдХрд░реАрдм 999.9 ├Ч 1000
1 (999.9 k) рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреА )ред рдпрд╣ 999,950 рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рд╣рдореЗрдВ 'M' рд╕реЗ 'G' рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╣рдо 999,950,000 рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕ рд╕реАрдорд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
bytes
рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░
exp
рдмрдврд╝рд╛рддреЗ рд╣реИрдВ:
if (bytes >= Math.pow(unit, exp) * (unit - 0.05)) exp++;
рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдХреЛрдб рддрдм рддрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 EB рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреАред
рдЕрдзрд┐рдХ рдиреМ
999 949 999 999 999 999 999 рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдХреЛрдб
1000.0 PB
рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо
999.9 PB
ред рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ, рдХреЛрдб рд╕рдЯреАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
рдЕрдм рд╣рдорд╛рд░рд╛ рд╕рд╛рдордирд╛
double
рдмрд╛рдзрд╛рдУрдВ рд╕реЗ рд╣реИред
рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рдкрд░рд┐рдЪрдп
рдЖрдИрдИрдИрдИ 754 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрд╣реБрдд рд╕рдШрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдЖрдзреЗ -1 рдФрд░ 1 рдХреЗ рдмреАрдЪ рд╣реИрдВ, рдФрд░ рдЬрдм рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ Long.MAX_VALUE
рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдХреБрдЫ рднреА рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╢рд╛рдмреНрджрд┐рдХ рдЕрд░реНрдереЛрдВ рдореЗрдВред
double l1 = Double.MAX_VALUE; double l2 = l1 - Long.MAX_VALUE; System.err.println(l1 == l2); // prints true
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП "рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреНрд╡рд╛рдЗрдВрдЯ рдмрд┐рдЯреНрд╕" рджреЗрдЦреЗрдВред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛ рдЧрдгрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
String.format
рдореЗрдВ рдбрд┐рд╡реАрдЬрди рдФрд░
- рд╡рд┐рд╕реНрддрд╛рд░ рд╕реАрдорд╛
exp
рд╣рдо
BigDecimal
рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдмрд╛рдК рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдкреИрджрд╛ рд╣реЛрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рдПрдкреАрдЖрдИ рдореЗрдВ
BigDecimal
рд▓рд┐рдП рд▓рдШреБрдЧрдгрдХ рдирд╣реАрдВ рд╣реИред
рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
bytes
рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕реАрдорд╛ рддрдХ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рдЯреАрдХрддрд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рддрджрдиреБрд╕рд╛рд░
exp
рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЧреЛрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрдХ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
if (exp > 4) { bytes /= unit; exp--; }
рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
, рдХрдо
рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рд╣рдорд╛рд░реЗ
рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ (99994999 ... 9 рдФрд░ 99995000 ... 0 рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП), рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ 12 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрд╢реЛрд▓реНрдб рдорд╛рди рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдореЛрдб рдХреЗ рд▓рд┐рдП 6), рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдПрдХ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ D00
16 рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
long th = (long) (Math.pow(unit, exp) * (unit - 0.05)); if (exp < 6 && bytes >= th - ((th & 0xFFF) == 0xD00 ? 52 : 0)) exp++;
рдЪреВрдВрдХрд┐ рд╣рдо рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрдЯрд░реНрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдХреЛрдб рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдирдХрд╛рд░рд╛рддреНрдордХ рдЗрдирдкреБрдЯ рдорд╛рди
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд
long
рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрднреА,
-10000 B
рдЬреИрд╕реЗ рдЗрдирдкреБрдЯ
-10000 B
рдЪрд▓реЛ
absBytes
:
long absBytes = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрддрдиреА
-Long.MIN_VALUE == Long.MIN_VALUE
рдХреНрдпреЛрдВрдХрд┐
-Long.MIN_VALUE == Long.MIN_VALUE
ред рдЕрдм рд╣рдо
bytes
рдмрдЬрд╛рдп
absBytes
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рднреА
absBytes
рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг
рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рдВрдШрдирд┐рдд:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЫреЛрд░реЛрдВ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рд╢рд╛рдЦрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖред рд▓реЗрдХрд┐рди рд╕рднреА рд╕реАрдорд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЛрдб рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкрдардиреАрдп рдмрди рдЧрдпрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдЙрддреНрдкрд╛рджрди рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рджреЗрдЦреЗрдВ:
"рдПрдХ рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ ред
"рдореБрдЦреНрдп рдЦреЛрдЬ
- рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкрд╛рд╕ рд╣рдЬрд╛рд░реЛрдВ рдкреНрд▓рд╕ рд╣реЛрдВред
- рд╕рднреА рд╕реАрдорд╛ рдорд╛рдорд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВред
- рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдЬрдЯрд┐рд▓ рд╣реИред
- рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА рдПрдЯреНрд░рд┐рдмреНрдпреВрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдХреЛрдИ рдЖрдкрдХреЛ рдкрд╛рдиреА рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред