Go: рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕: рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬрдире░ 2017  ┬╖  168рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: golang/go

https://github.com/golang/go/issues/17373 рдФрд░ https://github.com/golang/go/issues/10757 рдкрд░ рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛

рд╕рд╛рд░

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдкреГрд╖реНрдарднреВрдорд┐

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

  • ctz - рдЕрдиреБрдЧрд╛рдореА рд╢реВрдиреНрдп рдЧрд┐рдиреЗрдВред
  • clz - рдЕрдЧреНрд░рдгреА рд╢реВрдиреНрдп рдЧрд┐рдиреЗрдВ; рд▓реЙрдЧ_2.
  • рдкреЙрдкрдХрдВрдЯ - рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ; рд╣реИрдорд┐рдВрдЧ рджреВрд░реА; рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдорддрд╛ред
  • bswap - рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреНрд░рдо рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред

рд╕рд░реНрд╡реЗрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛:

  • рдЬрд╛рдУ рд╕рдВрдХрд▓рдХ рдФрд░ рдЙрдкрдХрд░рдг
  • рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп
  • рдЧреЛрд▓рдВрдЧ-рдирдЯреНрд╕@ рдЪрд░реНрдЪрд╛ рд╕реВрдЪреА
  • рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рд╣реИрдХреНрд╕ - https://graphics.stanford.edu/~seander/bithacks.html
  • рднрдпрд╛рдирдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рдВрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рдХреА рдПрдХ рдХреНрдпреВрд░реЗрдЯреЗрдб рд╕реВрдЪреА - https://github.com/keonkim/awesome-bits

рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдЗрди рдЪрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдЯреНрд╡реАрдбрд▓рд┐рдВрдЧ
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░рдХреАрдмреЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ,
рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЧреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рдиред

рд╣рдореЗрдВ рдЪрдпрдирд┐рдд рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛
рд░рдирдЯрд╛рдЗрдо, рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЯреВрд▓реНрд╕ рд╕рд╣рд┐рдд рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ:

| рдкреИрдХреЗрдЬ | рдХреНрд▓рдЬ | рд╕реАрдЯреАрдЬреЗрдб | рдкреЙрдкрдХрдВрдЯ | bswap |
| --- | --- | --- | --- | --- |
| рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ | рдПрдХреНрд╕ | рдПрдХреНрд╕ | | |
| рд░рдирдЯрд╛рдЗрдо/рдЖрдВрддрд░рд┐рдХ/sys | рдПрдХреНрд╕ | рдПрдХреНрд╕ | | рдПрдХреНрд╕ |
| рдЯреВрд▓реНрд╕/рдХрдВрдЯреЗрдирд░/рдЗрдирд╕реЗрдЯ | рдПрдХреНрд╕ | | рдПрдХреНрд╕ | |
| рд╕реАрдПрдордбреА/рд╕рдВрдХрд▓рди/рдЖрдВрддрд░рд┐рдХ/рдПрд╕рдПрд╕рдП | рдПрдХреНрд╕ | | рдПрдХреНрд╕ | |
| code.google.com/p/intmath | рдПрдХреНрд╕ | рдПрдХреНрд╕ | | |
| github.com/hideo55/go-popcount | | | рдПрдХреНрд╕ (рдПрдПрд╕рдПрдо) | |
| github.com/RoaringBitmap/roaring | | рдПрдХреНрд╕ | рдПрдХреНрд╕ (рдПрдПрд╕рдПрдо) | |
| github.com/tHinqa/bitset | рдПрдХреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ | |
| github.com/willf/bitset | рдПрдХреНрд╕ | | рдПрдХреНрд╕ (рдПрдПрд╕рдПрдо) | |
| gopl.io/ch2/popcount | | | рдПрдХреНрд╕ | |
| рдЬреАрд╕реАрд╕реА рдмрд┐рд▓рд┐рдиреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ |

рдХрдИ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

  • http://go-search.org/search?q=popcount 58 рдкреИрдХреЗрдЬ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • http://go-search.org/search?q=popcnt 11 рдкреИрдХреЗрдЬ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • TODO(mosoi): рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЦреЛрдЬреЗрдВ?

рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдиреЗ рдорд╣рддреНрд╡ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдорд╢реАрди рд╕реНрддрд░ рдХрд╛ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдкреЛрд░реНрдЯ рдХреЗ рдмрд┐рдирд╛ рдпреЗ рдСрдкрд░реЗрд╢рди рдмрд╣реБрдд рдорд╣рдВрдЧреЗ рд╣реИрдВред

| рдЖрд░реНрдЪ | рдХреНрд▓рдЬ | рд╕реАрдЯреАрдЬреЗрдб | рдкреЙрдкрдХрдВрдЯ | bswap |
| --- | --- | --- | --- | --- |
| рдПрдПрдордбреА 64 | рдПрдХреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ | рдПрдХреНрд╕ |
| рдПрдЖрд░рдПрдо | рдПрдХреНрд╕ | рдПрдХреНрд╕ | ? | рдПрдХреНрд╕|
| рдПрдЖрд░рдПрдо64 | рдПрдХреНрд╕ | рдПрдХреНрд╕ | ? | рдПрдХреНрд╕|
| S390X | рдПрдХреНрд╕ | рдПрдХреНрд╕ | ? | рдПрдХреНрд╕|

рдкреЙрдкрдХрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо/рдЖрдВрддрд░рд┐рдХ/sys рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ "рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП" рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдХрд▓рдХ рд╕рдорд░реНрдерди рд░рдирдЯрд╛рдЗрдо рдкреИрдХреЗрдЬ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдЕрдиреНрдп рдЧреЛрд▓рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдзреАрдореЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдПрд╕рдЯреАрдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА math/bits рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ clz, ctz, popcnt рдФрд░ bswap рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ / рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

package bits

// SwapBytes16 reverses the order of bytes in a 16-bit integer.
func SwapBytes16(uint16) uint16
// SwapBytes32 reverses the order of bytes in a 32-bit integer.
func SwapBytes32(uint32) uint32
// SwapBytes64 reverses the order of bytes in a 64-bit integer.
func SwapBytes64(uint64) uint64

// TrailingZeros32 counts the number of trailing zeros in a 32-bit integer, and if all are zero, then 32.
func TrailingZeros32(uint32) uint
// TrailingZeros64 counts the number of trailing zeros in a 64-bit integer, and if all are zero, then 64.
func TrailingZeros64(uint64) uint

// LeadingZeros32 counts the number of trailing zeros in a 32-bit integer, and if all are zero, then 32.
func LeadingZeros32(uint32) uint
// LeadingZeros64 counts the number of trailing zeros in a 64-bit integer, and if all are zero, then 64.
func LeadingZeros64(uint64) uint

// Ones32 counts the number of bits set in a 32-bit integer.
func Ones32(uint32) uint
// Ones64 counts the number of bits set in a 64-bit integer.
func Ones64(uint64) uint

рджрд▓реАрд▓

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдорд╛рдорд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рд░рдирдЯрд╛рдЗрдо рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЧреЛрд▓рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдзреАрдореЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
  • рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд░рдирдЯрд╛рдЗрдо/рдЖрдВрддрд░рд┐рдХ/sys рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд▓реЙрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдиреБрдХреВрд▓рддрд╛

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ stdlib API рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рдпрд╛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрдЧрдд рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

SwapBytes, TrailingZeros рдФрд░ LeadingZeros рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рд▓рд╛рдкрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдУрдиреНрд╕ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рднрд╛рд░рдд рд╕рд░рдХрд╛рд░ 1.9 рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЦреБрд▓реЗ рдореБрджреНрджреЗ (рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ)

рдирд╛рдо рдХрдард┐рди рд╣реИрдВ, рдмрд╛рдЗрдХ рд╢реЗрдб рдХрдореЗрдВрдЯ рдореЗрдВ рд╣реИред

рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдХреГрдкрдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ stdlib (рдЬреИрд╕реЗ рдЧрдгрд┐рдд/рдмрдбрд╝рд╛), рдЙрдкрдХрд░рдг рдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рддрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╣реИрдВ:

  • рдмрд╛рдПрдБ рдШреБрдорд╛рдПрдБ / рджрд╛рдПрдБ рдШреБрдорд╛рдПрдБ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ: &63 рдХреЛ рдЕрдм x86, x86-64 рдкрд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдШреБрдорд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

    • рд╡рд┐рдкрдХреНрд╖: рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯрд╛/рд╕рд░рд▓ред

    • рдкреНрд░рдпреБрдХреНрдд: рдХреНрд░рд┐рдкреНрдЯреЛ / рдирд┐рд░рдВрддрд░ рдШреБрдорд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рд░рд┐рд╡рд░реНрд╕ рдмрд┐рдЯреНрд╕

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ:?

    • рджреЛрд╖: ?

    • рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛: ?

  • рдХреИрд░реА рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ/рдЙрдк рдХрд░реЗрдВ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ: рдорд╣рдВрдЧрд╛ рдЕрдиреНрдпрдерд╛

    • рджреЛрд╖: ?

    • рдкреНрд░рдпреБрдХреНрдд: рдЧрдгрд┐рдд/рдмрдбрд╝рд╛

рдЗрддрд┐рд╣рд╛рд╕

14.рдЬрдирд╡рд░реА: рдЬрдм рддрд░реНрдХ 0 рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬрд╝реАрд░реЛрд╕ рдФрд░ рд▓реАрдбрд┐рдВрдЧрдЬрд╝реАрд░реЛрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ред
14.рдЬрдирд╡рд░реА: рдирд╛рдорд┐рдд рддрд░реАрдХреЗ: рдХрд╛рдЙрдВрдЯрдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕ -> рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕, рдХрд╛рдЙрдВрдЯрд▓реАрдбрд┐рдВрдЧрдЬрд╝реАрд░реЛрдЬрд╝ -> рд▓реАрдбрд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕, рдХрд╛рдЙрдВрдЯрдСрдиреНрд╕ -> рд╡рд╛рд▓реЗред
13.рдЬрдирд╡рд░реА: рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдирд╛рдоред
11.рдЬрдирд╡рд░реА: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рд╛ рдЧрдпрд╛ред

FrozenDueToAge Proposal-Accepted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдмрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдпрд╛ рджрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡реЗ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдмрд╛рдПрдБ рдпрд╛ рджрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рд░реЛрдЯреЗрдЯ-рд▓реЗрдлреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреЛ рдХреЛрдИ рднреА рд░рд╛рдЗрдЯ рд░реЛрдЯреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдкрдиреЗ рд░рд╛рдЗрдЯ рд░реЛрдЯреЗрд╢рди рдХреЛ рд▓реЗрдлреНрдЯ рд░реЛрдЯреЗрд╢рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░реЗрдВрдЧреЗред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреНрдпреЛрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ?

рд╕рднреА 168 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@brtzsnr рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рд░реЗрдкреЛ рдореЗрдВ рдЬрдорд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдЪреВрдВрдХрд┐ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди/18616-bit-twiddling.md (рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА) рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрдПрд▓ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@cespare https://github.com/golang/proposal рд╕реЗ "рдпрджрд┐ рд▓реЗрдЦрдХ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдПрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ"ред рдпрд╣ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдбреЙрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ, рдЕрдЧрд░ рдпрд╣ рдордЬрдмреВрдд рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рдЬрдорд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВред

рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛, рдпрд╣ рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

(рдПрдХ рдХреЗ рд▓рд┐рдП, рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рднреА nlz (== clz) рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред)

рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ рд╣реИред рдореИрдВ рдПрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдпрд╣ рдХрд╣рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рдХреНрдпрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ; рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЫреЛрдЯреЗ рдирд╛рдореЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

bits.TrailingZeros64(x) рдмрдЬрд╛рдп bits.CountTrailingZeros64(x)

рдЗрддреНрдпрд╛рджрд┐ред

рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдФрд░ рдиреНрдпреВрдирддрдо рд▓рдЧрддрд╛ рд╣реИ - рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдПрдХ рд╕реАрдПрд▓ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред

(рдпрд╣ рдПрдкреАрдЖрдИ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдПрд▓ рд╣реИ - рдПрдХ рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗред рд╣рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред)

@brtzsnr рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦрд╛ рд╣реИ: рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд░реНрдерди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдЕрдВрддрд┐рдо рдЖрд░реНрдХ "рдмреАрдПрд╕рдбрдмреНрд▓реНрдпреВрдПрдкреА" рд╣реИ - рдЯрд╛рдЗрдкреЛ?

рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

ctz рдФрд░ clz рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ 0 рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рднреА рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) TrailingZeros32 рд╕реЗ CountTrailingZeros32ред рдореБрдЭреЗ Ctz32 рд╕реЗ рднреА рдЦреБрд╢реА рд╣реЛрдЧреАред рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдФрд░ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреВрдЧрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ dr2chase рдиреЗ рдПрдХ рдмрд╛рд░ рдкрд╛рдпрд╛ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░/рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдХрдИ log2 рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред рдпрд╣ рд╕реАрдПрд▓рдЬреЗрдб рдХреЗ рдХрд░реАрдм рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рд╢рд╛рдпрдж рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдкреИрдХреЗрдЬ рдореЗрдВ рднреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╢рд╛рдпрдж рдЙрди рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬреЛ рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
рд╣реИрдХрд░ рдХреА рдкреНрд░рд╕рдиреНрдирддрд╛?

рдкреИрдХреЗрдЬ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди
рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдиреБрдХреВрд▓рди рдмрд╛рдж рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН,
рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдКрдкрд░реА рд╕реНрддрд░ рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рди рдХрд░рдиреЗ рджреЗрдВ
рдЗрдВрдЯрд░рдлреЗрд╕ред рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдХреЗрдЬ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ред

@minux , рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрдм рддрдХ рдЬрд┐рд╕ рднреА рдмрд┐рдЯ

рд╣реИрдХрд░реНрд╕ рдбрд┐рд▓рд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд▓рд╛рдн рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рд░рд┐рд╡рд░реНрд╕рдмрд┐рдЯреНрд╕ (uint32 рдФрд░ uint64 рдХреЗ рд▓рд┐рдП)
RotateLeft/Right (рджреЛ рдкрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдирд▓рд╛рдЗрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ
рд╣рдореЗрд╢рд╛ рд╢рд┐рдлреНрдЯ рд░реЗрдВрдЬ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)

рд╢рд╛рдпрдж рджреЛ рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдШрдЯрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреА? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

func AddUint32 (x, y, рдХреИрд░реАрдЗрди uint32) (рдХреИрд░реАрдЖрдЙрдЯ, рдпреЛрдЧ uint32) // рдХреИрд░реАрдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
0 рдпрд╛ 1 рд╣реЛред
рдФрд░ рдЗрд╕реА рддрд░рд╣ uint64 рдХреЗ рд▓рд┐рдПред

рдФрд░ SqrtInt.

рдореЗрд░реЗ рдХрдИ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдпрд╣реА рдмрд╛рдд рд╣реИ: рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдкреИрдХреЗрдЬ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдорд╛рддреНрд░ рдирд╣реАрдВ
рдЖрдВрддрд░рд┐рдХ рдкреИрдХреЗрдЬред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреИрдХреЗрдЬ рдХреЛ рд╕реАрдорд┐рдд рди рдХрд░рдиреЗ рджреЗрдВ
рдЗрдВрдЯрд░рдлреЗрд╕ред

рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЬреЛрдбрд╝/рдЧреБрдгрд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ: рдРрд╕реЗ рдХрдИ рдореБрджреНрджреЗ рд╣реИрдВ рдЬреЛ рддреЗрдЬреА рд╕реЗ рд╕реАрдЬреАрдУ рдХреЗ рд▓рд┐рдП рджрд╛рдпрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдРрд╕реЗ рд╣реА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ (рдкреНрд░рд╕реНрддрд╛рд╡ #16051), рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ bsr/ctz/etc. рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдЫрд┐рд▓рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЬрд╣рд╛рдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ cgo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛рддреЗ рд╣реИрдВред

@aclements рдиреЗ 1 рдЬреБрд▓рд╛рдИ 2016 рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреА:

@eloff , рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдФрд░ рдмреАрдПрд╕рдЖрд░ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд░реНрдЪрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдареЛрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ) рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ (рдЬреИрд╕реЗ рдЧрдгрд┐рддред рд╡рд░реНрдЧ рдЖрдЬ рд╣реИ)ред 1.7 рдХреЗ рд╕рд╛рде рд╣рдо рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЖрдЬрд╝рдорд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдм рдПрдХ ctz рдЗрдВрдЯреНрд░рд┐рдиреНрд╕рд┐рдХ рд╣реИ рдЬреЛ рдЗрд╕реЗ amd64 SSA рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рд╕рдордЧреНрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо-рдУрд╡рд░рд╣реЗрдб рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реАрдЬреАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдФрд░ рдХрд╛рд░рдг рдХреЛ рджреВрд░ рдХрд░ рджреЗрдЧрд╛ред

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ (рд╕реНрд╡рдпрдВ рд╢рд╛рдорд┐рд▓) рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдХреЗ рдЗрд╕ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред (рдФрд░ рд╣рд╛рдБ, cgo рднреА рдЕрдм 1.8 рдореЗрдВ рддреЗрдЬ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдЪреНрдЫрд╛ рднреА рд╣реИ)ред

RotateLeft/Right (рджреЛ рдкрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдирд▓рд╛рдЗрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ
рд╣рдореЗрд╢рд╛ рд╢рд┐рдлреНрдЯ рд░реЗрдВрдЬ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)

@minux рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ

@brtzsnr : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд┐рдирдХреНрд╕ рдХрд╛ рдЬрд┐рдХреНрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк (x << k) | (x >> (64-k)) рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк 0 <= k < 64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИ рдХреЛрдб рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрдиред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рд░реЛрд╣ рдерд╛

func leftRot(x uint64, k uint) uint64 {
   k &= 63
   return (x << k) | (x >> (64-k))
}

рддрдм рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (&63 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд┐ рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ k рдХреА рд╕реАрдорд╛ рд╕реАрдорд┐рдд рд╣реИред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдирдкреБрдЯ рдХреЛ рдмрд╛рдЙрдВрдбреЗрдб рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд AND рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд░реЛрдЯреЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рд╢реБрдХреНрд░, 13 рдЬрдирд╡рд░реА, 2017 рдХреЛ рд░рд╛рдд 10:37 рдмрдЬреЗ, рдХреАрде рд░рд╛рдиреНрдбреЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@brtzsnr https://github.com/brtzsnr : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд┐рдирдХреНрд╕ рдХреНрдпрд╛ рдХрд╣ рд░рд╣рд╛ рд╣реИ
рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ (x << k) | (x >> (64-k)), рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк 0 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
<= k < 64, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИ
рдХреЛрдб рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрдиред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рд░реЛрд╣ рдерд╛

func leftRot (x uint64, k uint) uint64 {
рдХрд╢реНрдореАрд░ рдФрд░ = 63
рд╡рд╛рдкрд╕реА (рдПрдХреНрд╕ << рдХреЗ) | (рдПрдХреНрд╕ >> (64-рдХреЗ))
}

рддрдм рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (&63 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд┐ рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд░реЗрдВрдЬ
k рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдирдкреБрдЯ рдХреЛ рдмрд╛рдЙрдВрдбреЗрдб рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рддрдерд╛ред рдпрд╣ рд░реЛрдЯреЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рд╕рд╣реАред рдпрджрд┐ рд╣рдо RotateLeft рдФрд░ RotateRight рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдмрд╛рдПрдВ/рджрд╛рдПрдВ k рдмрд┐рдЯреНрд╕ рдШреБрдорд╛рдПрдВ (рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ k рдХреНрдпрд╛ рд╣реИ)ред рдпрд╣ рд╣реИ
рд╣рдорд╛рд░реЗ рд╢рд┐рдлреНрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рднреА
рдирдХреНрд╢реЗ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШреБрдорд╛рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ (рд╢рд┐рдлреНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХ
рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рддреБрд▓рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

рдмреНрд▓реЙрд╕реНрдХ рд╕рдВрдкреАрдбрд╝рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдЯ рдФрд░ рдмрд┐рдЯ рд╕реНрд▓рд╛рдЗрдбреНрд╕ (рдлреЗрд░рдмрджрд▓ 17 рд╕реНрд▓рд╛рдЗрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ)ред рдпреЗ рдХрд╛рд░реНрдп SSE2/AVX2 рддреНрд╡рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрдХреНрд░, 13 рдЬрдирд╡рд░реА, 2017 рдкрд░ 11:24 pm рдкрд░, opennota [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдмреНрд▓реЙрд╕реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдЯ рдФрд░ рдмрд┐рдЯ рд╢рдлрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?
https://github.com/Blosc/c-blosc рд╕рдВрдкреАрдбрд╝рди рдкреБрд╕реНрддрдХрд╛рд▓рдп? рд╕реНрд▓рд╛рдЗрдб
http://www.slideshare.net/PyData/blosc-py-data-2014 (рдлреЗрд░рдмрджрд▓)
рд╕реНрд▓рд╛рдЗрдб 17 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред рдпреЗ рдХрд╛рд░реНрдп SSE2/AVX2 рддреНрд╡рд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

SIMD рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдпрд╣ рд╣реИ

17373.

рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рдЧреЛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдЗрд╖реНрдЯрддрдо рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рдЕрдиреБрдкрд╛рддрд╣реАрди рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рд▓рд┐рдЦрдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдкрд╣рдЪрд╛рди рд╕рдХреЗред

@minux рдФрд░ рдмрд╛рдХреА рд╕рднреА: рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдШреБрдорд╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреА рдирд┐рд░рдВрддрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдШреБрдорд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрд░рд┐рдкреНрдЯреЛ/sha256 рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реЛрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдЯреНрд╕ рдХреА рдирд┐рд░рдВрддрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рдеред

рдЗрдирд▓рд╛рдЗрди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд╣рдЪрд╛рди рд╕рдХреЗред

рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЗрдВрдЯрд░реНрдирд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЗрд╕реЗ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рд░рдЦрдирд╛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдШреБрдорд╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреА рдЧреИрд░-рд╕реНрдерд┐рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдШреБрдорд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдпрд╣рд╛рдВ #9337 рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

https://play.golang.org/p/rmDG7MR5F9

рдкреНрд░рддреНрдпреЗрдХ рдЖрдордВрддреНрд░рдг рдореЗрдВ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдШреБрдорд╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреА рдирд┐рд░рдВрддрд░ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдШреБрдорд╛рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╢рдирд┐рд╡рд╛рд░, 14 рдЬрдирд╡рд░реА, 2017 рдХреЛ рд╕реБрдмрд╣ 5:05 рдмрдЬреЗ, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реВ рдореЛрдУрдИ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЧреЛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ
рдФрд░ рдЕрдиреБрдкрд╛рддрд╣реАрди рд░реВрдк рд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ рдШреБрдорд╛рдПрдБ
рдЗрдирд▓рд╛рдЗрди рд▓рд┐рдЦрдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдкрд╣рдЪрд╛рди рд╕рдХреЗред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрдИ рдмрд╛рд░ рдЬреЛрд░ рджрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рдПрдХ рдЧреЛ рдкреИрдХреЗрдЬ рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВред рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдз рд░рдЦрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо
рд╡рд╛рдВрдЯ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдЪрд╛рд╣реЗ
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ
рдЪреВрдВрдХрд┐ рдПрдкреАрдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред

@minux https://github.com/minux рдФрд░ рдЕрдиреНрдп рд╕рднреА: рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ
рдШреБрдорд╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреА рдЧреИрд░-рд╕реНрдерд┐рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдШреБрдорд╛рдПрдВ рдХрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдХреНрд░рд┐рдкреНрдЯреЛ/sha256 рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реЛрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдЯреНрд╕ рдХреА рдирд┐рд░рдВрддрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рдеред

рднрд▓реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдШреВрдордиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрдерд┐рд░ рд╣реЛ,
рд╕рдВрдХрд▓рдХ рд╢рд╛рдпрдж рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рди рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рд╢рд┐рдлреНрдЯ рдХрд╛рдЙрдВрдЯ рдЬрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдХ рд╕рд░рдгреА рдореЗрдВ, рдпрд╛ рд▓реВрдк рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рдЫреБрдкрд╛рдПрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдЗрдирд▓рд╛рдЗрди рдХреЗ рдХреЙрд▓рд░ рднреА рдирд╣реАрдВ
рд╕рдорд╛рд░реЛрд╣ред

рдШреБрдорд╛рдиреЗ рдХреА рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ
рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
// https://play.golang.org/p/ctNRXsBt0z

func RotateRight(x, k uint32) uint32
func Popcount(x uint32) int {
    var v uint32
    for i := v - v; i < 32; i++ {
        v += RotateRight(x, i)
    }
    return int(-int32(v))
}

@ рдЬреЛрд╢реЗрд░рд┐рдпрди рдЙрджрд╛рд╣рд░рдг рдЦрд░рд╛рдм рдЗрдирд▓рд╛рдЗрдирд░ рдирд┐рд░реНрдгрдп рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдбрд╝рд╛рдВрдз рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢ рдХреА func rot(x, n) рдХреЗ рдмрдЬрд╛рдп rot = func(x, n) ?

@minux : рдореИрдВ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдХреИрд░реА рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдРрдб рдХрд╛ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? Add(x, y uint64) (c, s uint64) ? math/big рд╣рдореЗрдВ рд╢рд╛рдпрдж Add(x, y uintptr) (c, s uintptr) рднреА рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдЦрд░рд╛рдм рдЗрдирд▓рд╛рдЗрдирд░ рдирд┐рд░реНрдгрдп рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдбрд╝рд╛рдВрдз рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдВред рдпрд╣ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред :)

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реЛрдЯ = func (x, n) рдХреЗ рдмрдЬрд╛рдп func рд░реЛрдЯ (x, n) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛?

рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ - рдФрд░ рдпрд╣ рдмрд┐рдВрджреБ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдФрд░ рд╡реИрд╕реЗ рднреА, рдпрд╣ рдЙрдЪрд┐рдд рдХреЛрдб рд╣реИред

рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдкреИрдХреЗрдЬ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ?) рдХрд┐ рд░реЛрдЯреЗрдЯ рдФрд░ рдмрд╛рдЗрдЯ-рд╕реНрд╡реИрдк рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░рдВрддрд░-рд╕рдордп рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╢рд╛рдпрдж рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫред

рдЧреБрд░реБ, 19 рдЬрдирд╡рд░реА, 2017 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 11:50 рдмрдЬреЗ, рдорд╛рдЗрдХрд▓ рдореБрдВрдбреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдкреИрдХреЗрдЬ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ?)
рд░реЛрдЯреЗрдЯ рдФрд░ рдмрд╛рдЗрдЯ-рд╕реНрд╡реИрдк рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░рдВрддрд░-рд╕рдордп рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ
рдХреНрд░рд┐рдкреНрдЯреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╕реЛрдЪрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИ
рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреАред

рдмрд╛рдЗрдЯ рд╕реНрд╡реИрдк рдХрд╛ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд░рдВрддрд░ рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╢рд┐рдлреНрдЯ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрдард┐рди рд╣реЛрдЧрд╛
рдирд┐рд░рдВрддрд░ рд╕рдордп рдШреВрд░реНрдгрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдПред рд╢рд╛рдпрдж рдЧреЛ рдХрднреА рдирд╣реАрдВ рднрд╛рдЧреЗрдЧрд╛
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдпрд╣ рднреА рдирдЧрдгреНрдп рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдорд╛рдЗрдХреНрд░реЛрдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдПрдХ рдмрд╣реБ-рдЪрдХреНрд░ рд╢рд┐рдлреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ
рдирд┐рд░рдВрддрд░ рд╕рдордп рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдкрд░ рдШреВрдорддрд╛ рд╣реИред

рдпрджрд┐ рд╕рдЦреНрдд рдирд┐рд░рдВрддрд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдЦрдирд╛ рд╣реИ
(рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, рдпрд╣ рдордЬрдмреВрдд рдзрд╛рд░рдгрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдпреБрдХреНрдд
рдирд┐рд░реНрджреЗрд╢ рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рд░ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рдорд╛рдЗрдХреНрд░реЛрдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ред)

рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реЗ рд╣реИ
рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдгред

рдореИрдВ @minux рд╕реЗ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдирд┐рд░рдВрддрд░ рд╕рдордп рдХреНрд░рд┐рдкреНрдЯреЛ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛ/рд╕реВрдХреНрд╖реНрдо рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд░рд┐рдкреНрдЯреЛ/рд╕реВрдХреНрд╖реНрдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реЗ рдХреБрдЫ рдФрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдзреАрдореЗ рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░-рд╕рдордп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИред рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдХреЗ рд▓рд┐рдП @griesemer рдФрд░ @ Randall77 рдХреЗ рд▓рд┐рдП

рдЕрдм рдЬрдмрдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдЬреЛ рдкреНрд░рд╢реНрди рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ:

  • рдХреМрди рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ?
  • рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ ( uint64 , uint32 рдХреЗрд╡рд▓, рдпрд╛ uint64 , uint32 , uint16 , uint8 , рдпрд╛ uintptr )?
  • рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд┐рд╡рд░рдг (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП TrailingZeroesxx(x uintxx) uint , xx = 64, 32, рдЖрджрд┐ рдХреЗ рд╕рд╛рде, рдмрдирд╛рдо TrailingZeroes(x uint64, size uint) uint рдЬрд╣рд╛рдВ рдЖрдХрд╛рд░ 64, 32, рдЖрджрд┐ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред - рдмрд╛рдж рд╡рд╛рд▓рд╛ рдПрдХ рдЫреЛрдЯреЗ рдПрдкреАрдЖрдИ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реЛ)
  • рдХреБрдЫ рдирд╛рдо рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ (рдореБрдЭреЗ "рд╣реИрдХрд░ рдбрд┐рд▓рд╛рдЗрдЯ" рд╢рдмреНрджрд╛рд╡рд▓реА рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╡рд░реНрддрдиреА рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ)
  • рдХреНрдпрд╛ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рд╣реИред

@brtzsnr рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЖрдЧреЗ

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХреНрд╕рдПрдХреНрд╕ рдирд╛рдореЛрдВ рдХреА рд╡рд░реНрддрдиреА рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ: рдмрд┐рдЯреНрд╕ред рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬреЗрд░реЛ (рдпреВрдЗрдВрдЯ 64 (рдПрдХреНрд╕), 32) рдмрд┐рдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдФрд░ рдХрдо рдкрдардиреАрдп рд╣реИред рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬреЗрд░реЛ 32 (рдПрдХреНрд╕), рдЖрдИрдПрдордУ, рдФрд░ рдпрд╣ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рдЪрд░-рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧреА uintptr рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ (xx = Ptr?)ред

рдпрд╣ рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ uint8 рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛-рдЕрдЪрд╛рдирдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирдП xx = 8 рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдВрдЧреЗ рдЬреЛ 8 рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рд░рд┐рд▓реАрдЬ рдбреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдорд╛рдиреНрдп рдЖрдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЫреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд░реНрддрдиреА рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИрдХрд░ рдХреА рдЦреБрд╢реА рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рд╡рд┐рд╡рд░рдг рдореЗрдВ "рдЗрд╕ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЦреЛрдЬ (рдкреГрд╖реНрда рдореЗрдВ рдпрд╛ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдпрджрд┐ рдЖрдк рдЧрд▓рдд рд╡рд░реНрддрдиреА рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╣рд┐рдд рдирд╛рдо рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ .

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИтАФрдпрд╣ рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЧрдгрд┐рдд рд╣реИред

рдореИрдВ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ SwapBytes{16,32,64} рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реИ sync/atomic рд╕реЗ SwapBytes(..., bitSize uint) ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ strconv рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ParseInt(..., bitSize int) рдкреИрдЯрд░реНрди, рд╡рд╣рд╛рдБ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдз рд╣реИ bits рдФрд░ atomic , рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд╣рд╛рдБ рдХреЗ рд╕рд╛рде рд╣реИ strconv ред

рдореБрдЭреЗ SwapBytes (uint64, size uint) рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдиреЗ рдХреЗ рддреАрди рдХрд╛рд░рдг:

  1. рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдХрд╛рд░ рд╕рдВрдХрд▓рди рд╕рдордп рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ (at
    рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрддрдорд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП),
  2. рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред uint32 рдХреЛ . рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ
    uint64, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  3. рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
    рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг (рдЬрдм рдЧреЛ рдХреЛ рдЬреЗрдирд░рд┐рдХ рд╕рдорд░реНрдерди рдорд┐рд▓рддрд╛ рд╣реИ)ред

@griesemer рд░реЙрдмрд░реНрдЯ, рдХреГрдкрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЙрд░реНрдо рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ:

func fffNN(x uintNN) uint

рдЬреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдПрдирдПрди рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдирд┐рд░рдВрддрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ NN=64 рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ (incl. uintptr)ред

рдЬреЛ рд╣рдореЗрдВ рд╕реАрдзреЗ @brtzsnr рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ (рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдкрд╛рдВрддрд░) рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рдмреАрдЪ рд▓реЛрдЧреЛрдВ рдиреЗ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ:

// LeadingZeros64 returns the number of leading zero bits in x.
// The result is 64 if x == 0.
func LeadingZeros64(x uint64) uint

// TrailingZeros64 returns the number of trailing zero bits in x.
// The result is 64 if x == 0.
func TrailingZeros64(x uint64) uint

// Ones64 returns the number of bits set in x.
func Ones64(x uint64) uint

// RotateLeft64 returns the value of x rotated left by n%64 bits.
func RotateLeft64(x uint64, n uint) uint64

// RotateRight64 returns the value of x rotated right by n%64 bits.
func RotateRight64(x uint64, n uint) uint64

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд╡реИрдк рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ: 1) рдореБрдЭреЗ рдХрднреА рднреА рд╕реНрд╡реИрдкрдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдВрдбрд┐рдпрди-рдЬрд╛рдЧрд░реВрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ?

// SwapBits64 reverses the order of the bits in x.
func SwapBits64(x uint64) uint64

// SwapBytes64 reverses the order of the bytes in x.
func SwapBytes64(x uint64) uint64

рдлрд┐рд░ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдХреЗрд╡рд▓ рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ (рдЬреИрд╕реЗ рд▓реЙрдЧ 2) рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд░реАрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рдХрд╣реАрдВ рдФрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдкреИрдХреЗрдЬ рдирд╛рдо bits рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ?

// Log2 returns the integer binary logarithm of x.
// The result is the integer n for which 2^n <= x < 2^(n+1).
// If x == 0, the result is -1.
func Log2(x uint64) int

// Sqrt returns the integer square root of x.
// The result is the value n such that n^2 <= x < (n+1)^2.
func Sqrt(x uint64) uint64

рдЕрдВрдд рдореЗрдВ, @minux рдиреЗ AddUint32 рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдореБрд╢реНрдХрд┐рд▓ рд╣реИрдВ (рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд┐рдзрддрд╛ рд╣реИ)ред рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдкрд░реЛрдХреНрдд рдкрд░ рдХреБрдЫ рдЖрдо рд╕рд╣рдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдкреНрд░рд╢рди:

  • рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд░рд╛рдп?
  • рдкреВрд░реНрдгрд╛рдВрдХ рдСрдкреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд░рд╛рдп?
  • рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдо/рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд░рд╛рдп?

рдореИрдВ рд▓рдВрдмреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдг рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдХреЗрдЬ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЙрдирдХреЗ рдЙрдкрдирд╛рдо ("nlz", "ntz", рдЖрджрд┐) рдХрд╣ рд╕рдХрддреА рд╣реИрдВред

@griesemer , рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЯрд╛рдЗрдкреЛ рд╣реИрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреАрдВред

рдореИрдВ рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ SwapBits рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдХреНрдпрд╛ рдкреНрд░рдореБрдЦ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрд┐рдЯ рд░рд┐рд╡рд░реНрд╕рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рдмрд╕ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛:

v := bits.SwapBytes64(v)
v = (v&0xaaaaaaaaaaaaaaaa)>>1 | (v&0x5555555555555555)<<1
v = (v&0xcccccccccccccccc)>>2 | (v&0x3333333333333333)<<2
v = (v&0xf0f0f0f0f0f0f0f0)>>4 | (v&0x0f0f0f0f0f0f0f0f)<<4

@bradfitz , @dsnet : рдЕрджреНрдпрддрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдирд┐рд╢реНрдЪрд┐рдд рдЯрд╛рдЗрдкреЛ)ред рд╕рд╛рде рд╣реА рдЕрджреНрдпрддрди рдкреНрд░рд╢реНрди (рд▓реЛрдЧ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ)ред

рдЬрдм рддрдХ рдмрд┐рдЯ-рд╕реНрд╡реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рди рд╣реЛ, рдореИрдВ SwapBits рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдЕрдХреЗрд▓реЗ рдирд╛рдо рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрд┐рдЯреНрд╕ рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЗ рднреАрддрд░ рдпрд╛ рдкреВрд░реЗ uint64 рдореЗрдВ рд╕реНрд╡реИрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдмрд╛рд╣рд░ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рд░рд┐рд╡рд░реНрд╕ рдмрд┐рдЯ
рдПрдлрдПрдлрдЯреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрдкрдпреЛрдЧ рд╣реИрдВред

рд░рд┐рд╡рд░реНрд╕ рдмрд┐рдЯ рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: arm has
рдЖрд░рдмреАрдЖрдИрдЯреА рдирд┐рд░реНрджреЗрд╢ред

@griesemer рдЬрд╣рд╛рдБ рддрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рддрд░рд╣ рд╣реИ

func Ones64(x uint64) uint
func RotateLeft64(x uint64, n uint) uint64

рдХреНрдпрд╛ RotateLeftN рдЖрджрд┐ рдпреВрдВрдЯ рд▓реЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рдЖрдВрддрд░рд┐рдХрдХрд░рдг (рдЬрдм рд╕рдВрднрд╡ рд╣реЛ) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡рд╣ рдбреЛрдореЗрди рд╣реИ? рдпрджрд┐ рдХреЛрдИ рдордЬрдмреВрдд рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрдирдЯреНрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рдорд┐рд╕рд╛рд▓ рд╣реИ, рднрд▓реЗ рд╣реА рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рди рд╣реЛред рдпрджрд┐ рдХреЛрдИ рдордЬрдмреВрдд рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд N рдХреЗ рд▓рд┐рдП uintN рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рднрд▓реЗ рд╣реА OnesN рдФрд░ рдЗрд╕рдХреЗ ilk рдХреЛ ints рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдРрд╕рд╛ рди рд╣реЛ, рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЕрдиреНрдп рдмрд┐рдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреБрдХреНрдд N рдХреЗ рд▓рд┐рдП рдПрдХ uintN рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@jimmyfrasche рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЛрдореЗрди рд╣реИред рд╕реАрдкреАрдпреВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреАрдЬреЗрдВ рдПрдХ int рдпрд╛ uint рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХрднреА рднреА рдирдХрд╛рд░рд╛рддреНрдордХ (рдкрд░рд┐рдгрд╛рдо) рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдирдХрд╛рд░рд╛рддреНрдордХ (рддрд░реНрдХ) рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдШреВрд░реНрдгрди рдХреЗ рд▓рд┐рдП рддрд░реНрдХ)ред рд╣рдо рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд░реЛрдЯреЗрдЯ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ int рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрджрд┐ рдареАрдХ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ uints uints рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрдВрдЧреЗ (рдпрд╣ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдореЗрдВ рдорд╛рдорд▓рд╛ рд╣реИ) рдФрд░ рдХрд┐рд╕реА рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рднреА рдпрд╣ рд╕реАрдкреАрдпреВ рд▓рд╛рдЧрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдлреНрдд рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрдардиреАрдпрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ)ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдиреНрдпрдерд╛ рдареЛрд╕ рддрд░реНрдХ рд╕реБрдирдиреЗ/рджреЗрдЦрдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдЯреЗрдЯ рдмрд┐рдЯ рдХрд╛рдЙрдВрдЯ рдпреВрдВрдЯ (рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреЗ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рднрд╛рд╖рд╛ рдХреЗ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ред

рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛
RotateRight -2 рдмрд┐рдЯ RotateLeft 2 рдмрд┐рдЯреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

@minux рдХреЛрдИ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм Rotate(x, n) рдХреЛ x рдХреЛ n mod 64 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: 10 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдПрдВ рдШреБрдорд╛рдПрдВ 64-10 = 54 рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рджрд╛рдПрдВ рдШреБрдорд╛рдиреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рдпрд╛ (рдпрджрд┐ рд╣рдо рдЗрдВрдЯ рддрд░реНрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ) -10 рдмрд┐рдЯреНрд╕ (рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдорд╛рдирддреЗ рд╣реБрдП рдмрд╛рдПрдВ рдШреБрдорд╛рдПрдВ)ред -10 рдореЙрдб 64 = 54ред рд╕рдВрднрд╡рддрдГ рд╣рдореЗрдВ рд╕реАрдкреАрдпреВ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рднреА рдореБрдлреНрдд рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 32 рдмрд┐рдЯ x86 ROL/ROR рдирд┐рд░реНрджреЗрд╢ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЗрд╡рд▓ CL рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдирд┐рдЪрд▓реЗ 5 рдмрд┐рдЯреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, 32 рдмрд┐рдЯ рд░реЛрдЯреЗрдЯ рдХреЗ рд▓рд┐рдП рдореЙрдб 32 рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдмрд╛рдХреА stdlib рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рддрддрд╛ рд╣реИред рдРрд╕реЗ рдХрдИ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ uint рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп ints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдкрд╡рд╛рдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреЗ рджреВрд╕рд░реЗ рд╣реЛрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @minux рдХрд╛ рдЕрд░реНрде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдкрдврд╝рдиреЗ/рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЗрд░рдХ рддрд░реНрдХ рд╣реИред

рдмрд┐рдЯреНрд╕ рдЪрд╛рд╣рд┐рдПред рд╕реНрд╡реИрдкрдмрд┐рдЯреНрд╕ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рдЯреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреИрд╕реЗ рдмрд┐рдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВредрд╕реНрд╡реИрдк?

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рдмрд┐рдЯреНрд╕ рд╣реИред рдмрд┐рдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп рд╕реНрд╡реИрдкрдПрди (v uint64, n int)ред рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдЬрд╣рд╛рдВ n рд╕реНрд╡реИрдк рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЬрдм n=1 рдмрд┐рдЯреНрд╕ рдЙрд▓рдЯ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрдм n=8, рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрд╡реИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдмрд┐рдЯреНрд╕ред рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЕрдм рдЕрд╕реНрддрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХрднреА рднреА n рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИ, рд╢рд╛рдпрдж рдЕрдиреНрдп рдЕрд╕рд╣рдордд рд╣реЛрдВрдЧреЗред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ , LeadingZeros64 , TrailingZeros64 , Ones64 рд╕рднреА LGTMред

рдПрдХ рдПрдХрд▓ Rotate64 рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реЛрдЯреЗрдЯ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рдХ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдШреБрдорд╛рд╡ рдПрдХ рд╕реНрдерд┐рд░ рд░рд╛рд╢рд┐ рд╕реЗ рднреА рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП (рдпрджрд┐/рдЬрдм рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ) рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд╛рдПрдВ/рдмрд╛рдПрдВ рдлрд╝рдВрдХреНрд╢рди рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рдирд╣реАрдВ рд╣реЛрдЧреАред

рдмрд┐рдЯ/рдмрд╛рдЗрдЯ рд╢рдлрд▓рд┐рдВрдЧ/рд╕реНрд╡реИрдкрд┐рдВрдЧ/рд░рд┐рд╡рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдХреЛрдИ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдмрд┐рдЯреНрд╕ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреЗ рд▓рд┐рдП, bits.Reverse64 рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рд╢рд╛рдпрдж bits.ReverseBytes64 ? рдореБрдЭреЗ Swap64 рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ Swap64 рд╕рдореВрд╣ рдХрд╛ рдЖрдХрд╛рд░ рд▓реЗрдиреЗ рдХреА рдЕрдкреАрд▓ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдореВрд╣ рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ 64 рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрджрд┐ рдПрдХрдорд╛рддреНрд░ рд╕рдореВрд╣ рдЖрдХрд╛рд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ 1 рдФрд░ 8 , рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рджреЗрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рд╣реЗрд░рдлреЗрд░ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП arm64 рдФрд░ amd64 BMI2 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдЧрдгрд┐рдд рдХрд╛рд░реНрдп рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкреИрдХреЗрдЬ рдЧрдгрд┐рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд┐рдЯреНрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдмрдВрдзрд┐рдд, рдХреНрдпреЛрдВ рдирд╣реАрдВ func Sqrt(x uint64) uint32 ( uint64 рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп)?

рд╣рд╛рд▓рд╛рдВрдХрд┐ AddUint32 рдФрд░ рдорд┐рддреНрд░ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдЙрди рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде, MulUint64 рдПрдЪрдПрдордпреВрдПрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд┐ рд╕реБрдкрд░-рдорд┐рдирд┐рдорд▓рд┐рд╕реНрдЯ рдЖрд░рдЖрдИрдПрд╕рд╕реА-рд╡реА рдЖрдИрдПрд╕рдП рднреА рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдкрд╣рд▓реЗ рдХреБрдЫ рд╕рдордЭ рд▓реЗрддреЗ рд╣реИрдВ; рд╣рдо рд╣рдореЗрд╢рд╛ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

bits рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдкреИрдХреЗрдЬ рдирд╛рдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдпрд╛рдд рдкрде рд╕рд┐рд░реНрдл bits рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ math/bits , рд▓реЗрдХрд┐рди рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред

рдмрд┐рдЯреНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдкреИрдХреЗрдЬ рдирд╛рдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдпрд╛рдд рдкрде рд╕рд┐рд░реНрдл рдмрд┐рдЯреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдИрдПрдордУ, рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл bits , (рдкреИрдХреЗрдЬ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛) рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдкреИрдХреЗрдЬ bytes ред рдпрд╣реА рд╣реИ, рдмрд┐рдЯреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ/рдмрд┐рдЯреНрд╕ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП Reader рдФрд░ Writer рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕реЗ math/bits рд╕реЗ рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред

(рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдмрд┐рдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд░реАрдбрд░/рд░рд╛рдЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВ)

рдПрдХ рд░реЛрдЯреЗрдЯ 64 рд╕рд╛рдЗрди рдХреА рд╣реБрдИ рд░реЛрдЯреЗрдЯ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдЖрдХрд░реНрд╖рдХ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдШреБрдорд╛рд╡ рдПрдХ рд╕реНрдерд┐рд░ рд░рд╛рд╢рд┐ рд╕реЗ рднреА рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП (рдпрджрд┐/рдЬрдм рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ) рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд╛рдПрдВ/рдмрд╛рдПрдВ рдлрд╝рдВрдХреНрд╢рди рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рдирд╣реАрдВ рд╣реЛрдЧреАред

рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╛рдПрдВ/рджрд╛рдПрдВ рдШреБрдорд╛рдХрд░ рдПрдХ Rotate рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рдкреИрдХреЗрдЬ рдПрдкреАрдЖрдИ рд░рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ n рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рднреА рд╣реИ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐:

  • рдирдХрд╛рд░рд╛рддреНрдордХ n рдкрд░рд┐рдгрд╛рдо рдмрд╛рдИрдВ рдУрд░ рдШреБрдорд╛рддреЗ рд╣реИрдВ
  • рд╢реВрдиреНрдп n рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ
  • рд╕рдХрд╛рд░рд╛рддреНрдордХ n рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдШреБрдорд╛рддреЗ рд╣реИрдВ

рдореЗрд░реЗ рд▓рд┐рдП, рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдорд╛рдирд╕рд┐рдХ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдУрд╡рд░рд╣реЗрдб рджреЛрдиреЛрдВ рдХреЛ рдПрдХ Rotate рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕реНрдкрд╖реНрдЯ RotateLeft рдФрд░ RotateRight рдЬрд╣рд╛рдВ n рдПрдХ uint рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИред

@mdlayher рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ k рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдВ рдУрд░ рдШреВрдордиреЗ рд╡рд╛рд▓реЗ n-рдмрд┐рдЯ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП nk рдмрд┐рдЯреНрд╕ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдШреБрдорд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ k рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдВ рдУрд░ рдШреВрдордиреЗ рдХрд╛ рдорддрд▓рдм рд╣рдореЗрд╢рд╛ (k mod n) рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдШреВрдордирд╛ рд╣реЛрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк n рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ)ред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реЛрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ k mod n рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдШреВрдорддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЧрдпрд╛ред рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдпрд╛ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИред

рдЙрд╕рдХреЗ рдКрдкрд░, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП x86 рдкрд░) рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреИрд░-рд╕реНрдерд┐рд░ k рдХреЗ рд▓рд┐рдП рднреАред

@griesemer , Rotate рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рдХреМрди рд╕реА рджрд┐рд╢рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдХреНрдпрд╛ Rotate32(1, 1) 2 рдпрд╛ 0x80000000 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореИрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо 2 рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ @mdlayher рдЗрд╕реЗ 0x80000000 рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реА рдУрд░, RotateLeft рдФрд░ RotateRight рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рддрд░реНрдХ рд▓реЗрддреЗ рд╣реЛрдВред (рдореИрдВ @minux рд╕реЗ рдЕрд╕рд╣рдордд

@aclements рдЬрд┐рд╕реЗ RotateLeft64 рдирд╛рдордХ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд╛рдПрдВ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рдеред (рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рднреА 2 рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВрдВрдЧрд╛, 0x800000000 рдХреА рдирд╣реАрдВред)

@ рдЬреЛрд╢реЗрд░рд┐рдпрди , рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ RotateLeft рдмрд┐рдирд╛ RotateRight рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реЛрдЯреЗрд╢рди рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рд░рддрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд▓рдЧрддреА рд╣реИ рдпрджрд┐ рд░реЛрдЯреЗрд╢рди рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░рдВрддрд░ рд░реЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "рджреЛ рдмрд┐рдЯреНрд╕ рд╕реЗ рджрд╛рдПрдВ рдШреБрдорд╛рдПрдВ" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ "рдирдХрд╛рд░рд╛рддреНрдордХ рджреЛ рдмрд┐рдЯреНрд╕ рдордЬрд╛рдХ рдХрд░рдХреЗ рдмрд╛рдПрдВ рдШреБрдорд╛рдПрдВ"ред

рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреЙрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдмрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдпрд╛ рджрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡реЗ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдмрд╛рдПрдБ рдпрд╛ рджрд╛рдПрдБ рдШреБрдорд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рд░реЛрдЯреЗрдЯ-рд▓реЗрдлреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреЛ рдХреЛрдИ рднреА рд░рд╛рдЗрдЯ рд░реЛрдЯреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдкрдиреЗ рд░рд╛рдЗрдЯ рд░реЛрдЯреЗрд╢рди рдХреЛ рд▓реЗрдлреНрдЯ рд░реЛрдЯреЗрд╢рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░реЗрдВрдЧреЗред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреНрдпреЛрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ?

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

@aclements @ianlancetaylor рдкреНрд╡рд╛рдЗрдВрдЯ рд▓рд┐рдпрд╛ред (рдЙрд╕ рдиреЗ рдХрд╣рд╛, RotateLeft/Right рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдШреБрдорд╛рдиреЗ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред)

рдПрдХ рдирд╛рдо рд╡рд┐рдЪрд╛рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреИрдХреЗрдЬ рдирд╛рдо рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред bits64.Ones рдмрдЬрд╛рдп bits.Ones64 ред

@btracey , рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореБрдВрд╣ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡рд╣рд╛рдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ред :) рд╣рдорд╛рд░реЗ рдкрд╛рд╕ flag64.Int рдпрд╛ math64.Floatfrombits рдпрд╛ sort64.Floats рдпрд╛ atomic64.StoreInt ред

@bradfitz golang.org/x/image/math/f64 рдФрд░ golang.org/x/image/math/f32 рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореМрдЬреВрдж рд╣реИрдВ

рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ atomic рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ (рдореЗрд░реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ, рд╢реБрдХреНрд░ рд╣реИ)ред рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдЕрд▓рдЧ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреИрдХреЗрдЬ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рдмрдбрд╝реЗ рд╣реИрдВред

рдЬрдм рдЖрдк bits64 рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рдЧреЛрдбреЛрдХ рдкрд░),
Ones LeadingZeros TrailingZeros

bits рдЬрд╛рдХрд░ рджреЗрдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп
Ones8 Ones16 Ones32 Ones64 LeadingZeros8 ...

@iand , рд╡рд╣ рднреА рдмрд╣реБрдд рд╕рдХрд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 32 рдФрд░ 64 рдПрдлрд╝, рдореИрдЯ рдФрд░ рд╡реАрдИрд╕реА рдХреЗ рд▓рд┐рдП рд╕рднреА рдореМрдЬреВрджрд╛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдлрд┐рд░ рднреА, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рд╢реИрд▓реА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИред

рдЧреЛ рдореЗрдВ pkg64.foo рдХреЗ рдмрдЬрд╛рдп pkg.foo64 рдирд╛рдордХрд░рдг рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдордЬрдмреВрдд рдорд┐рд╕рд╛рд▓ рд╣реИред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ n рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рддреЛ рдкреИрдХреЗрдЬ API n рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди API рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдкреАрдЖрдИ рдХреЛ рдЧреЛ рдбреЙрдХ рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:

// TrailingZeros16 returns the number of trailing zero bits in x.
// The result is 16 if x == 0.
func TrailingZeros16(x uint16) uint

// TrailingZeros32 returns the number of trailing zero bits in x.
// The result is 32 if x == 0.
func TrailingZeros32(x uint32) uint

// TrailingZeros64 returns the number of trailing zero bits in x.
// The result is 64 if x == 0.
func TrailingZeros64(x uint64) uint

рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдорд╛рдирд╕рд┐рдХ рдЙрдкрд░рд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// TrailingZerosN returns the number of trailing zero bits in a uintN value x for N = 16, 32, 64.
// The result is N if x == 0.
func TrailingZeros16(x uint16) uint
func TrailingZeros32(x uint32) uint
func TrailingZeros64(x uint64) uint

рдЧреЛрдбреЛрдХ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдПрдХрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рднреА рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рдареАрдХ рдФрд░ рдЧреЛ рдкрд░рдВрдкрд░рд╛ рдореЗрдВ рд▓рдЧрддреА рд╣реИред рдкреНрд░рд╕реНрддреБрддрд┐ рдореБрджреНрджрд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╢реНрди рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдкреИрдХреЗрдЬ рдирд╛рдо рдореЗрдВ рдмрд┐рдЯ рдЖрдХрд╛рд░ рдбрд╛рд▓рдиреЗ рдкрд░ +1ред

рдмрд┐рдЯреНрд╕ 64ред рд▓реЙрдЧ 2 рдмрд┐рдЯреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рдкрдврд╝рддрд╛ рд╣реИред рд▓реЙрдЧ 264 (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдЧ 2 рд╡рд╣рд╛рдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рдФрд░ рдкреИрдХреЗрдЬ рдирд╛рдордХрд░рдг рдЗрд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ)

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╕реНрдХреЗрд▓рд░ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ "рдкреИрд░рд╛рдореАрдЯрд░реАрдХреГрдд" рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╣реИрдВ, рддреЛ рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдмрд╕ рдЖрдпрд╛рдд рдкрде рдмрджрд▓реЗрдВ (рд╕рдВрдкреВрд░реНрдг-рд╢рдмреНрдж рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИрдВ gofmt -r рдХреЗ рд╕рд╛рде рддреБрдЪреНрдЫ рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдкреНрд░рддреНрдпрдп рдкрд░рд┐рд╡рд░реНрддрди рдЕрдзрд┐рдХ рдЕрдЬреАрдм рд╣реИрдВ)ред

рдореИрдВ @griesmeyer рд╕реЗ рд╕рд╣рдордд

рд╣рдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/рдмрд╛рдЗрдирд░реА рд╕реЗ рдПрдХ рдирд╛рдЯрдХ рдЪреБрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ Uint64, Uint32, ... рдирд╛рдордХ рд╡рд░реНрд░реНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗред

рдмрд┐рдЯреНрд╕.Uint64.RightShift
рдмрд┐рдЯреНрд╕редUint8.Reverse
рдмрд┐рдЯреНрд╕.Uintptr.Log2
...

@griesemer рдпрд╣ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕рдореВрд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрди рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдлрд┐рд░ рдЕрд╕рдВрдЧрддрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ funcs рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдвреВрдВрдврдирд╛? рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдХрдо рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдкрд░реЛрд╕рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@rogpeppe рдпрд╣

@nerdatmath рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдмреЛрд▓рдЪрд╛рд▓ рдХреЗ рдЕрд░реНрде рдореЗрдВ рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЧреЛ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ (рд╡реЗ рджреЛрдиреЛрдВ рдмрд╛рдЗрдирд░реА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдЗрдЯрдСрд░реНрдбрд░), рдЗрд╕рд▓рд┐рдП рдЪрд░ рд╕рд┐рд░реНрдл рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ рдФрд░ рдЧреЙрдбреЛрдХ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ (# 7823) рдХреЛ рддрдм рддрдХ рдирд╣реАрдВ рдЙрдард╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ, рдЬреЛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред

рдореИрдВ рдЖрдХрд╛рд░ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

@nerdatmath рдпрджрд┐ рд╡реЗ vars рд╣реИрдВ, рддреЛ рд╡реЗ bits.Uint64 = bits.Uint8 ), рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛, рдЬреЛ рдкреИрдХреЗрдЬ рдХреЗ (рдХрдо рд╕реЗ рдХрдо рднрд╛рдЧ) рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ред

рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдПрдХ рдЕрдирдПрдХреНрд╕рдкреЛрд░реНрдЯреЗрдб рдЯрд╛рдЗрдк рдХреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реНрдЯреЗрдЯ рдирд╣реАрдВ рд╣реИ (рдЕрдирдПрдХреНрд╕рдкреЛрд░реНрдЯреЗрдб рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рдХреНрдЪрд░)ред рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрд┐рдирд╛ рдЧреЛрдбреЛрдХ (рдЖрдЬ) рд╕реНрдереВрд▓ рд╣реЛрдЧрд╛ред рдлрд┐рдХреНрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рд╡рд╣ рдЬрд╡рд╛рдм рд╣реИред

рдпрджрд┐ рдЖрдк рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рджреЛрд╣рд░рд╛рд╡ рдФрд░ рдорд╛рддреНрд░рд╛ рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо "X/рдмрд┐рдЯреНрд╕/int64s", "X/bits/ints", "X/ рдмрд┐рдЯреНрд╕/int32s" "рддреНрд░реБрдЯрд┐рдпреЛрдВ", "рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕", "рдмрд╛рдЗрдЯреНрд╕" рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрдХреЗрдЬ рд╡рд┐рд╕реНрдлреЛрдЯ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдкреИрдХреЗрдЬ рдмрд┐рдЯ рд╣реЛрдирд╛ рд╕рд░рд▓ рд╣реИ рдФрд░ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд╣реАрдВ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ Ones64 рдФрд░ TrailingZeroes64 рдЕрдЪреНрдЫреЗ рдирд╛рдо рд╣реИрдВред рд╡реЗ рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рдХрд┐ рд╡реЗ рдПрдХ рдЧрд┐рдирддреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЙрдкрд╕рд░реНрдЧ рдХрд╛рдЙрдВрдЯ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирд╛рдо рдФрд░ рднреА рд▓рдВрдмреЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдмрдбрд╝реЗ рднрд╛рд╡реЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЫреЛрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рдПрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ "рд╣реИрдХрд░ рдбрд┐рд▓рд╛рдЗрдЯ" рдкреБрд╕реНрддрдХ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЗрдВрдЯреЗрд▓ рдЕрд╕реЗрдВрдмрд▓рд░ рдирд┐рдореЛрдирд┐рдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ: Popcnt64, Tzcnt64 рдФрд░ Lzcnt64ред рдирд╛рдо рдЫреЛрдЯреЗ рд╣реИрдВ, рдПрдХ рд╕реБрд╕рдВрдЧрдд рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ, рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдЧрд┐рдирддреА рд▓реМрдЯрд╛ рджреА рдЧрдИ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред

рдЖрдо рддреМрд░ рдкрд░ рдЧреЛ рдореЗрдВ рдЧрд┐рдирддреА рдХреЛ рдЗрдирдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рднреА рдЬрдм рдХреЛрдИ рдЧрд┐рдирддреА рдХрднреА рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореБрдЦреНрдп рдЙрджрд╛рд╣рд░рдг рдмрд┐рд▓реНрдЯрд┐рди рдлрд╝рдВрдХреНрд╢рди рд▓реЗрди рд╣реИ, рд▓реЗрдХрд┐рди рдкрдврд╝реЗрдВ, рд▓рд┐рдЦреЗрдВ, рдкреНрд░рд┐рдВрдЯрдл рдЗрддреНрдпрд╛рджрд┐ рд╕рднреА рд░рд┐рдЯрд░реНрди рдкреВрд░реНрдгрд╛рдВрдХ рднреА рд╣реИрдВред рдореБрдЭреЗ рдПрдХ рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдпреВрдВрдЯ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк (рдЕрдВрдХрди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕/int64s.Ones рдФрд░ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕.Ones64 рдХреЗ рдмреАрдЪ рд╣реИ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреВрдВрдЧрд╛ред рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд╛рдЬрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреИрдХреЗрдЬ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕ рд╣реЛрдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдкреИрдХреЗрдЬ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдореЗрдВ рдмрд┐рдЯреНрд╕ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреИрдХреЗрдЬ рдХреЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рдХреА рдорд╛рдореВрд▓реА рдЕрд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

@ulikunitz рдЖрдк рд╣рдореЗрд╢рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ctz := bits.TrailingZeroes64 , рдФрд░ рдЗрд╕реА рддрд░рд╣, рдХреЛрдб рдореЗрдВ рдЬреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдирд╛рдо рдФрд░ рдЬрдЯрд┐рд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреЙрдореНрдкреИрдХреНрдЯ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рддрд╛ рд╣реИред рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рд╡рд░реНрддрди, countTrailingZeroes := bits.Ctz64 , рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЪреНрдЫреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдг рдкрд╣рд▓реЗ рд╣реА рдЦреЛ рдЪреБрдХреЗ рд╣реИрдВред

рдореИрдВ рдмрд┐рдЯ рд╕реНрддрд░ рдкрд░ рд╕рд╛рдорд╛рди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрдо рд╣реА рдЧрдбрд╝рдмрдбрд╝ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рджреЗрдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╕рд╛рд▓реЛрдВ рд╣реЛ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╣реИрдХрд░ рдХреЗ рдбрд┐рд▓рд╛рдЗрдЯ/рдПрдПрд╕рдПрдо-рд╢реИрд▓реА рдХреЗ рд╕рднреА рдирд╛рдо рдХреНрд░реБрджреНрдз рд░реВрдк рд╕реЗ рдЧреБрдкреНрдд рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЦреЛрдЬ рд╕рдХреВрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреВрдВред

рдореИрдВ @ulikunitz рд╕реЗ рд╕рд╣рдордд

init() instead of initialize(), 
func instead of function
os instead of operatingsystem
proc instead of process
chan instead of channel

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореИрдВ рдЙрд╕ рдмрд┐рдЯреНрд╕ рдХреЛ рдЪреБрдиреМрддреА рджреВрдВрдЧрд╛редTrailingZeroes64 рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рд╣реИред рд╢реВрдиреНрдп рдХреЗ рдкреАрдЫреЗ рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? рд╕реНрд╡рдпрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рдВрдкрддреНрддрд┐ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдХрд░ рдбрд┐рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ RotateRight64 рдФрд░ RotateLeft64 рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ ZeroesRight64 рдФрд░ ZeroesLeft64 рд╣реА рдХреНрдпреЛрдВ рди рдХрд╣реЗрдВ?

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЬрдм рднреА рдЖрдк рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рдЙрдкрдирд╛рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рдирд╛рдо рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЙрдкрдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ string.HasSuffix рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рджрд┐рдП рдЧрдП рдирд╛рдо рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдпрд╛ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди, рдХрднреА-рдХрднреА, рдПрдХ рдмрд╛рд░ рдХреА ETL рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╛ рдЬреИрд╕реЗ рдореИрдВ рдХрд░реВрдВрдЧрд╛ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ ends := strings.HasSuffix рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдирд╛рдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣рд╛рде рдореЗрдВ рд╣реИред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВ рдЬреЛ рдмреЗрд╣рдж рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред рдмрд╣реБрдд рд╕реЗ рдЧреИрд░-рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ OS рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред рдХреЛрдИ рднреА рдХреЛрдб рдкрдврд╝ рд░рд╣рд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдЧреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВ, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП func рдЫреЛрдЯрд╛ рд╣реИред рдЪреИрдирд▓ рдЧреЛ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд╣реИрдВ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЪрд╛рди рдареАрдХ рд╣реИред рдмрд┐рдЯреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрднреА рднреА рдЕрддреНрдпрдВрдд рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬрд╝реАрд░реЛ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд╕реАрдЯреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИред

@jimmyfrasche https://github.com/golang/go/issues/18616#issuecomment -275828661 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдЧреЛ/рдбреЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдиреНрдирд┐рд╣рд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдирд╛рдо рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдПрдХ рд╣реА рдЙрдкрд╕рд░реНрдЧ рдФрд░ рдПрдХ рдкреНрд░рддреНрдпрдп рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ рдФрд░/рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рд╢рдмреНрдж рдЬреЛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ "рдЫреЛрдЯрд╛" рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдорд┐рд▓рд╛рди рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЖрдЗрдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╣рд╛рдИрдЬреИрдХ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред

FYI рдХрд░реЗрдВ, go/doc рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХреЛ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП #18858 рдмрдирд╛рдпрд╛ред

@mdlayher рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@rogpeppe рдЖрдХрд╛рд░ рдХреЛ рдкреИрдХреЗрдЬ рдирд╛рдо рдореЗрдВ

@ulikunitz рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯреЗ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реВрдВ; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджрд░реНрдн рдореЗрдВ (рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП)ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреИрдХреЗрдЬ рдПрдкреАрдЖрдИ рд╣реИ, рдФрд░ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ) рдлрд╝рдВрдХреНрд╢рди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрде/рдмрд┐рдЧ рдореЗрдХ рд▓реАрдбрд┐рдВрдЧрдЬреЗрд░реЛрд╕, рд▓реЙрдЧ 2 рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛ рджреЛ рдХреЙрд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд▓рдВрдмрд╛ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдирд╛рдо рдареАрдХ рд╣реИ, рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЗрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд▓рдкреЗрдЯрдирд╛ рд╕рд╕реНрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓ рджреВрд░ рдЗрдирд▓рд╛рдЗрди рдХреА рдЬрд╛рдПрдЧреАред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЗрдВрдЯреЗрд▓ рдирд┐рдореЛрдирд┐рдХреНрд╕ рднреА рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИрдВ, рдЙрдирдХрд╛ рдЬреЛрд░ "рдЧрд┐рдирддреА" (рд╕реАрдПрдирдЯреА) рдкрд░ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ 2 рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Log2 рдореЗрдВ 2 рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред bits.Log рдХрд╛ рддрд╛рддреНрдкрд░реНрдп 2 рдХреЗ рдЖрдзрд╛рд░ рд╕реЗ рд╣реИред

рдмрд┐рдЯреНрд╕ред рд▓реЙрдЧ 64 рдПрд╕рдЬреАрдЯреАрдПрдоред

@griesemer рдореЗрд░рд╛ рдХрдЯ-рдСрдл рд╡рд╛рдХреНрдп рд╢рд╛рдпрдж рдЕрдирд╛рдбрд╝реА рд╕рдВрдкрд╛рджрди рдХреА рдПрдХ рдХрд▓рд╛рдХреГрддрд┐ рдереАред рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред

@griesemer рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ рдирд╛рдо рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рд░рдЦрддрд╛ рд╣реВрдВ: рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рддрд░реНрдХ рдереЗ: рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ред рдкреИрдХреЗрдЬ рдмрдбрд╝рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ nlz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реАрдбрд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕ рдХрд╛ рдирд╣реАрдВред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реИред

@ulikunitz рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИ рдЬреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВ рд╣реИрдВред

@ulikunitz , рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд:

рдкреИрдХреЗрдЬ рдмрдбрд╝рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ nlz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реАрдбрд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕ рдХрд╛ рдирд╣реАрдВред

рдЖрдВрддрд░рд┐рдХ рдирд┐рдЬреА рдЧреИрд░-рдирд┐рд░реНрдпрд╛рддрд┐рдд рдирд╛рдореЛрдВ рдХрд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдЬреЛ рдХреБрдЫ рднреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдорд╛рдирдХ рдЕрдиреБрднрд╡ред

рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рдирд╛рдо рддрдм рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрдВрд╕ рдЬрд╛рддреЗ рд╣реИрдВред

CL https://golang.org/cl/36315 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ https://go-review.googlesource.com/#/c/36315/ рдХреЛ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП (рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ) рдкреНрд░рд╛рд░рдВрднрд┐рдХ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП) API (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде) рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред

рд╣рдо рдЕрднреА рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ (bits.go) рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред рдорд╛рдореВрд▓реА рдореБрджреНрджреЛрдВ (рдЯрд╛рдЗрдкреЛ, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ CL рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред рдЬрдм рддрдХ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЦреБрд╢ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ, рдореИрдВ CL рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд░рд╣реВрдВрдЧрд╛ред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдкреАрдЖрдИ рд╕реЗ рдЦреБрд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

@griesemer рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ CLZ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ https://github.com/ericlagergren/decimal/tree/ba42df4f517084ca27f8017acfaeb69629a090fb/internal/arith рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдЪреЛрд░реА / рдмреЗрд▓рд╛ рдХреЗ рд╕рд╛рде / рдЬреЛ рдХреБрдЫ рднреАред

@ericlagergren рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдмрд╛рд░ рдПрдкреАрдЖрдИ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдЬрдЧрд╣ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@griesemer , рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдХ рд╣реА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рддреНрдпрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ 1.9 рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕ рдкрд░ рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реЛрдЧреА?

18858, рдпрд╛рдиреА!

@mdlayher рдпрд╣ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╢реЛрд╕реНрдЯреЙрдкрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдХреЗрд╡рд▓" рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдкреАрдЖрдИ (рдЬреЛ рдЖрдЧреЗ рдЪрд▓рдХрд░ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрдд рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

@griesemer @bradfitz рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдкрдардиреАрдпрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ:

n := bits.LeadingZeros64(x)

рдореБрдЭреЗ рдЕрднреА рднреА Ones64(x) рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрджреЗрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реАрдбрд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕ рдФрд░ рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬрд╝реЗрд░реЛрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рдмрд╛рдд рдкрд░ рд╡рд┐рд░рд╛рдо рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рд╕рд╣рд┐рдд рдкреИрдХреЗрдЬ рдХреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╢реБрджреНрдз рдЧреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА: https://github.com/ulikunitz/bits
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг: https://godoc.org/github.com/ulikunitz/bits

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд╡реИрдк рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ [...] рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдВрдбрд┐рдпрди-рдЬрд╛рдЧрд░реВрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ?

рдореИрдВ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ SwapBytes рдХреЛ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ binary/encoding.BigEndian рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ (рдпрд╛ рддреЗрдЬ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╣реИред

рдореИрдВ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╕реНрд╡реИрдкрдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдирд░реА/рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ (рдпрд╛ рддреЗрдЬрд╝ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

@mundaym рдХреНрдпрд╛ рдпреЗ рд░реВрдЯреАрди рдХрднреА SwapBytes64 рд╕реАрдзреЗ BSWAP рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рджреЗрдирд╛ рдЕрдиреБрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, imoред

рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдирд░реА/рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ (рдпрд╛ рддреЗрдЬрд╝ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ ReverseBytes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ рдпрджрд┐ unsafe рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдорд╢реАрди рдЙрдиреНрд╣реЗрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рдЦрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, encoding.{Little,Big}Endian.X рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддрдирд╛ рд╣реА рдЧреИрд░-рдкреЛрд░реНрдЯреЗрдмрд▓ рд╣реИ рдЬрдм рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП ReverseBytes рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдЧрд░ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рдореБрдЭреЗ рджреБрдЦ рд╣реЛрдЧрд╛ред

@ericlagergren

рдХреНрдпрд╛ рдЗрди рджрд┐рдирдЪрд░реНрдпрд╛рдУрдВ рдХреЛ рдХрднреА рдЧрд╣рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рд╣рд╛рдВ, encoding/binary рдмрд╛рдЗрдЯ рд░рд┐рд╡рд░реНрд╕рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд (рдпрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) (рдЬреИрд╕реЗ BSWAP ) рдРрд╕реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЬреЛ рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдПрдХреНрд╕реЗрд╕ (рдЬреИрд╕реЗ 386, amd64, s390x, ppc64le рдФрд░ рд╢рд╛рдпрдж рдЕрдиреНрдп)ред

SwapBytes64 рдХреЛ рд╕реАрдзреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рджреЗрдВ рдХреНрдпреЛрдВрдХрд┐ BSWAP рдЗрд╕рдХрд╛ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, imoред

рдореИрдВ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред рдПрдВрдбрд┐рдпрдирдиреЗрд╕-рдЕрдирдЬрд╛рди рдХреЛрдб рдореЗрдВ SwapBytes рд╡реИрдз рдЙрдкрдпреЛрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рдирдЯрд╛рдЗрдо/рдЖрдВрддрд░рд┐рдХ/sys рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдЧрд╛рдореА рд╢реВрдиреНрдп рдФрд░ рдмрд╛рдЗрдЯ рд╕реНрд╡реИрдк рдХреЗ рдЧреЛ, рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@dsnet рджрд┐рд▓рдЪрд╕реНрдк, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рд╣реИ?

@aclements рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмрд╛рдЗрдЯ рд╕реНрд╡реИрдк рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

@mundaym , AFAIK рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЙрддрдирд╛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рд╕реАрдЯреАрдЬрд╝ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЕрднреА рдЬреЛрдбрд╝рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рдерд╛ред :) (рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ред)

рд╕рднреА: рдХреГрдкрдпрд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХред рд╕реАрдПрд▓ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рдзреАрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдкреАрдЖрдИ рд╕реЗ рдЦреБрд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЯреНрдпреВрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрд╕ рдиреЛрдЯ рдкрд░: рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ uintptr рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рдХрд┐ рдпрд╣ uint32 рдпрд╛ uint64 рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХрд╛ рд╣реИред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ uint рд╣рдореЗрд╢рд╛ рдпрд╛ рддреЛ uint32 рдпрд╛ uint64 )ред рд░рд╛рдп? рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВ? рдЕрдЪреНрдЫреЗ рдирд╛рдо рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ? ( LeadingZerosPtr ?)

рд╣рдореЗрдВ рдЕрднреА uintptr рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ рддреЛ рдореИрде/рдмрд┐рдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдкреНрд░рддреНрдпрдп Ptr рдПрд╕рдЬреАрдЯреАрдПрдоред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ uint рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╕рднреА рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреЛ рд░реВрдкрд╛рдВрддрд░рдг-рдореБрдХреНрдд рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП int рдЖрдХрд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рд╢рд░реНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдХреЛрдИ рдирд╛рдордХрд░рдг рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВред

Uintptr рдХреЗ рд▓рд┐рдП Ptr, uint рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рддреНрдпрдп рдирд╣реАрдВред Ones, Ones8, Ones16, Ones32, Ones64, OnesPtr, рдЖрджрд┐ред

рдореИрдВ рдпрд╣рд╛рдВ рдЕрд▓реНрдкрд╕рдВрдЦреНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ рдЬреЛ uintptr рд▓реЗрддреЗ рд╣реИрдВред
рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХреЛ рд╢реБрд░реВ рд╕реЗ рд╣реА uint32/uint64 рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ
рдмрд╕ рд╕рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП uint64 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ
рд╕рдВрдХрд▓рдХред)

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ:
рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╢рдмреНрдж рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ,
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░, uintptr рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рдЙрд╕реА рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ
рдореВрд▓ рд╢рдмреНрдж рдЖрдХрд╛рд░ред
рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг amd64p32 рд╣реИ, рдФрд░ рд╣рдо mips64p32 рдФрд░ . рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
mips64p32le рдмрд╛рдж рдореЗрдВ, рдЬреЛ 64-рдмрд┐рдЯ MIPS рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред uintptr рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИ
рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рддрдЯрд╕реНрде рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдПрдХ рд╕рдорд╛рдзрд╛рди, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдирд╛рдо рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ (рд╢рд╛рдпрдж рдпрд╣
рдмреНрд░рд╛рдВрдбреЗрдб рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ)ред
64-рдмрд┐рдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ Word = uint32 // рдпрд╛ uint64 рдЯрд╛рдЗрдк рдХрд░реЗрдВ
// рд╣рдореЗрдВ рд╢рд╛рдпрдж рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрджрд░реНрд╢ рд╕реНрдерд┐рд░рд╛рдВрдХ рднреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ
рдмрд┐рдЯреНрд╕, рдорд╛рд╕реНрдХ рдЖрджрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рдФрд░ рдлрд┐рд░ Word рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдкреЗрд╢ рдХрд░реЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЧрдгрд┐рдд/рдмрд┐рдЯ рджреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрдк, рдореВрд▓,
рдбрд┐рд╡; рдЧрдгрд┐рдд/рдмрд┐рдЧ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рдирд┐рд░реНрдпрд╛рдд type Word uintptr ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рдмрдиреА рд░рд╣реЗред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрдгрд┐рдд/рдмрд┐рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ uintptr API рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рд╖рдп рд╕реЗ рдереЛрдбрд╝рд╛ рднрдЯрдХрдирд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдореВрд▓ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╢рдмреНрдж рдХрд╛ рдЖрдХрд╛рд░ рд╕рд┐рд░реНрдл рдпреВрдВрдЯ рдирд╣реАрдВ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреВрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рддреНрдпрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░, рд╡рд░реНрдб рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рд░ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рдкреЗрд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВред рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдмрд╕ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рдпрд╛ рдмрд┐рд▓реНрдб-рдЯреИрдЧ рд╕рдВрд░рдХреНрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрдирд╛ред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдПрдХ uint32/64 рдЖрдзрд╛рд░рд┐рдд рдмрд┐рдЯреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреЛрдИ uintptr рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдерд╛)ред

@minux рдореИрдВ 2-рдкрд░рд┐рдгрд╛рдо рдРрдб, рд╕рдм, mul, div рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ - рд▓реЗрдХрд┐рди рдЪрд▓рд┐рдП рдЗрд╕реЗ рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЕрднреА рднреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдиреНрдпрдерд╛ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ ...

рдореИрдВрдиреЗ API рдореЗрдВ uint рдФрд░ uintptr рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗ рд╣реИрдВред рд╕реАрдПрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рд╣реВрдБред

@ рдЬреЛрд╢реЗрд░рд┐рдпрди 64 рдмрд┐рдЯ рдорд╢реАрди рдкрд░ рднреА рджреЗрд╢реА

рдпрджрд┐ uintptr рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдПрдХрдорд╛рддреНрд░ рд╡реИрдз рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдВрддрд░рд┐рдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдХреЗрд╡рд▓ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдореЗрдВ uintptr рд╕рд╛рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдХреА рдХреЛ рдмреЗрдирдХрд╛рдм рдХрд░реЗрдВред

@jimmyfrasche , @griesemer рдпрд╣

рдпреВрдВрдЯ рднреА рдЧрд▓рдд рд╣реИред рдпрд╣ amd64p32 рдкрд░ 32-рдмрд┐рдЯ рд╣реИред
рджрд░рдЕрд╕рд▓, рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ uintptr рдХреЗ рдмрдЬрд╛рдп uint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЧреЛ 1 рдкрд░,
int/uint рд╣рдореЗрд╢рд╛ 32-рдмрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ uintptr рдХреЛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рддрд╛ рд╣реИ
рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдПред

рд╣рдо рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ
рдЪрд┐рдВрддрд╛ред рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ
рджреБрд░реНрдШрдЯрдирд╛ред рдЪрд▓рд┐рдП рдЧрд▓рддреА рдХреЛ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рддреЗред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдПрдХ рдПрдХреАрдХреГрдд рдкреНрд░рдХрд╛рд░ "рд╡рд░реНрдб" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ
рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ
uintptr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдПрдХ рдЬрд╛рджреБрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣реИ
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рддреЛ 32-рдмрд┐рдЯ рдпрд╛ 64-рдмрд┐рдЯред рдпрджрд┐ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрдкрдХрд╛ рдХреЛрдб uintptr (рдЬрд┐рд╕рдХреА рдЪреМрдбрд╝рд╛рдИ рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реНрд╡рддрдВрддреНрд░ рддрд░реАрдХреЗ рд╕реЗ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ Word рд╕рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╕рд╣реА рд╣реИрдВред

рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо 8 рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ
рдФрд░ рдкрд╣рд▓реЗ рдкрд╛рд╕ рдореЗрдВ 16-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ред рд╡реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡реИрд╕реЗ рднреА рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рд╢рдмреНрдж рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдП) рд╕реАрдзреЗ uintptr рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рд╣реИ), рдФрд░ рдмреА) рдХреЛрдб рдЬреЛ рдареАрдХ рд╕реЗ рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ . рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рд╕рдВрдЧрддрддрд╛ рдЧрд╛рд░рдВрдЯреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ)ред рдмрд╣рд░рд╣рд╛рд▓, рдЗрд╕реЗ рдПрдХ рддрд░рдл рдЫреЛрдбрд╝ рджреЗрдВред рд╣рдо рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╣рдо рд╕рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рдпреВрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рд╣рдо uint/uintptr рдЖрдХрд╛рд░ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдПрдХ if-statement рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╣реА рдЖрдХрд╛рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрдерди рдирд┐рд░рдВрддрд░-рдореБрдбрд╝рд╛ рд╣реБрдЖ рд╣реЛрдЧрд╛, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЖрдХрд╛рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдВрдд рдореЗрдВ, рд╢рдмреНрдж рдкреНрд░рдХрд╛рд░ (рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ? рдмреЗрд╢рдХ рд╣рдо рдЗрд╕реЗ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ? рдпрд╣ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдкреВрд░реНрд╡-рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ 'рд╢рдмреНрдж' рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

рдпрд╣рд╛рдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдпрд╛ рдирд╛рдо) рд╣реЛрдирд╛ рдЬреЛ рд╕реАрдзреЗ uintptr рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдЧрд▓рддреА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреЛ рдкреНрд╡реЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдереЛрдбрд╝рд╛ рдЯреНрд╡рд┐рд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдорд╢реАрди рд╢рдмреНрдж рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдм int/uint рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдореЗрдВ рдпреВрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 32 рдмрд┐рдЯ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдФрд░ рдЬрдмрдХрд┐ рдЧрдгрд┐рдд/рдмрд┐рдЧ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕реБрд╕рдВрдЧрдд рджреБрдирд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рдмрдбрд╝рд╛ рд╣реИред рд╡рд░реНрдб, рдпрд╣ рдкреИрдХреЗрдЬ рдкрд┐рдХ-рдПрдВрдб-рдпреВрдЯрд┐рд▓рд┐рдЯреА рд░реВрдЯреАрди рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдХрдо рд╕рдореНрдореЛрд╣рдХ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдореЗрдВ int/uint рд░реВрдкреЛрдВ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рднреА рдХреЙрд▓рд░реНрд╕ рдХреЛ рдХрдерди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдирдХреА рдЖрдорддреМрд░ рдкрд░ рдЬрд░реВрд░рдд рд╣реЛрдЧреА рдпрд╛ рдирд╣реАрдВред

рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдмреЗрдореЗрд▓ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рдПрдкреАрдЖрдИ рдореЗрдВ uintptr рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

  1. рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ word32.go рддрдерд╛ word64.go рдЧрдгрд┐рдд/рдмрд┐рдЧ рдореЗрдВ рдмрд┐рд▓реНрдб рдЯреИрдЧ рдФрд░ uintptr-рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рдЬреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рд╕рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред

  2. рдмрд┐рдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓реЗрдВред рд╡рд░реНрдб рдЯреВ рдпреВрдВрдЯред рд╕рдЯреАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рд╣реЛред рдЗрд╕реЗ рдмрджрд▓рдирд╛ amd64p32 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдмрд╛рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред

@rsc : "рд╣рдордиреЗ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдореЗрдВ uint рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 32 рдмрд┐рдЯреНрд╕ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред" рдЖрд╣ рд╣рд╛рдБ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ uintptr рдХреА рдкрд╕рдВрдж рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ред Go uint/int рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдерд╛ рдЬреЛ рдорд╢реАрди рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдХрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдореИрдВ рдмрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реБрдБрдЧреАредрдЙрдардиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЛ рдФрд░ рджреЗрдЦреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рд╕рднреА: рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ uintptr рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://go-review.googlesource.com/#/c/36315/ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░рднрд╛рд╡ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд/рдмрд┐рдЧ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ (https://go-review.googlesource.com/36328)ред

рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
1) рдореИрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЭреБрдХрд╛рд╡ рд░рд╣рд╛ рд╣реВрдБ Leading / TrailingZeros рдХрд╛рд░реНрдпреЛрдВ uint рдмрдЬрд╛рдп int ред рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓реНрдп рдХреЛ рддрджрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдФрд░ math/big рдЗрд╕рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИред рдореИрдВ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП Ones рдПрдХ uint рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдЬрд╡рд╛рдмреА рддрд░реНрдХ?

2) рдореИрдВ One рдирд╛рдо рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ Leading / TrailingZeros рдЕрдиреБрд░реВрдк рд╣реВрдВред рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Population ?

3) рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХреА рд╣реИ рдХрд┐ Log рдЗрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рдмреИрдарддрд╛ рд╣реИред Log рдПрдордПрд╕рдмреА рдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ (x == 0 рдХреЗ рд▓рд┐рдП -1 рдХреЗ рд╕рд╛рде)ред рддреЛ рд╣рдо рдЗрд╕реЗ MsbIndex рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓реЙрдЧ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ)ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Len рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдЯреНрд╕ рдореЗрдВ x рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ; рдпрд╛рдиреА, `рд▓реЙрдЧ (рдПрдХреНрд╕) == рд▓реЗрди (рдПрдХреНрд╕) -1)ред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ?

рдореИрдВ рдПрдХ рдирд╛рдо рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓реАрдбрд┐рдВрдЧ/рдЯреНрд░реЗрд▓рд┐рдВрдЧрдЬреЗрд░реЛрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реВрдВред рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

рдкрд╛рд░рдВрдкрд░рд┐рдХ Popcount рдХреНрдпреЛрдВ рдирд╣реАрдВ?

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд▓реЗрди рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдЯреНрд╕ рдореЗрдВ x рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ; рдпрд╛рдиреА, `рд▓реЙрдЧ (рдПрдХреНрд╕) == рд▓реЗрди (рдПрдХреНрд╕) -1)ред

Len рдпрд╛ Length рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рдФрд░ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред

1.

рдореИрдВ рдирд╛рдо рд╡рди рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓реАрдбрд┐рдВрдЧ/
рдЕрдиреБрдЧрд╛рдореА рд╢реВрдиреНрдпред рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

рдмрд┐рдЯреНрд╕редрдЧрд┐рдирддреА?

@aclements рдХреНрдпрд╛

рдЬрдирд╕рдВрдЦреНрдпрд╛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХрд╣рддреА рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕ рд╢рдмреНрдж рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рддреЛ рдмрд╕ рдЧрдгрдирд╛ рдХрд░реЗрдВ: рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдПрдХрддрд░рдлрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рднреАрддрд░ рднреА, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХрд╛рдЙрдВрдЯрдСрди рдЗрд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ, рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред

@aclements рдХреНрдпрд╛

"рдмрд┐рдЯреНрд╕" рдирд╛рдордХ рдкреИрдХреЗрдЬ рдореЗрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕реЗрдЯ рдмрд┐рдЯреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдФрд░ рдХреНрдпрд╛ рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдЙрдВрдЯрдСрди рднреА рдареАрдХ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред "Ones" рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ LeadingZeros / TrailingZeros рдореЗрдВ "Zeros" рднреА рд╕рдорд╛рдиреНрддрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИред рдпрд╣ рдЕрдирд╕реЗрдЯ рдмрд┐рдЯреНрд╕ рдпрд╛ рдХреБрд▓ рдмрд┐рдЯреНрд╕ рдХреА рдЧрд┐рдирддреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЕрдВрддрд┐рдо рд╡реНрдпрд╛рдЦреНрдпрд╛ рдмреЗрд╣рдж рдЕрд╕рдВрднрд╡ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЬрд╛рд▓ рдЬреЛ рд╢рд╛рдорд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реИ рдФрд░ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпрдп-рдореБрдХреНрдд рдЧрдгрдирд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреА рддрд░рд╣ рд╣реИред рд╕рд╛рдЗрдЬрдСрдл)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ AllOnes рдпрд╛ TotalOnes рдЬреИрд╕реЗ рдХреБрдЫ рдкреАрдЫреЗ/рдЕрдЧреНрд░рдгреАZeroes рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐, рдЙрдирдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

AllOnes рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд╕рднреА рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдПрдХ рдмрд┐рдЯрдорд╛рд╕реНрдХ рдореЗрдВ?), рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рд╢рдмреНрдж рдЬреЛ рд╕рднреА рд╣реИред

рдХрд╛рдЙрдВрдЯрдСрди рдФрд░ рдЯреЛрдЯрд▓рдСрди рд▓рдЧрднрдЧ рдПрдХ рдЬреИрд╕реЗ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо "рдЬрдирд╕рдВрдЦреНрдпрд╛ рдЧрдгрдирд╛" рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрдСрди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг (https://go-review.googlesource.com/#/c/36315/) рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ:

1) рдореИрдВрдиреЗ Ones рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ PopCount : рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рд╕реБрд╕рдВрдЧрдд рд▓реЗрдХрд┐рди рдХреБрдЫ рд╣рдж рддрдХ рдиреАрд░рд╕ рдирд╛рдо Ones рдХреЛ рд▓реЗрдХрд░ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдереЗред рд╣рд░ рдХреЛрдИ рдЬреЛ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ PopCount рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╛рдХреА рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдЧрдд рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрд░реНрде рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ рд░рд╛рд▓реНрдл рд╡рд╛рд▓реНрдбреЛ рдЗрдорд░реНрд╕рди рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ ("рдПрдХ рдореВрд░реНрдЦ рд╕реНрдерд┐рд░рддрд╛ рдЫреЛрдЯреЗ рджрд┐рдорд╛рдЧ рдХрд╛ рд╢реМрдХ рд╣реИ ...")ред

2) рдореИрдВрдиреЗ Log рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ Len рдЬреИрд╕рд╛ рдХрд┐ bits.Len ред рдПрдХ рд╕рдВрдЦреНрдпрд╛ x рдХреА рдмрд┐рдЯ рд▓рдВрдмрд╛рдИ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (https://en.wikipedia.org/wiki/Bit-length) рдореЗрдВ x рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ Log рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреИрд░-"рдмрд┐рдЯ-рдлрд┐рдбрд▓реА" рдЧреБрдгрд╡рддреНрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рднреА рдПрдХ рдЬреАрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Len(x) == Log(x) + 1 рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдордиреЗ Log рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХрд╛ рдпрд╣ рдлрд╛рдпрджрд╛ рд╣реИ рдХрд┐ рдЕрдм рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛> = 0 рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ (рддреБрдЪреНрдЫ) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ +/- 1 рд╕реБрдзрд╛рд░ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ (рд╣рдо рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ)ред рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдмрддрд╛рдпрд╛ рд╣реИ, рдЯреНрд░реЗрд▓рд┐рдВрдЧ/рд▓реАрдбрд┐рдВрдЧ рдЬрд╝реАрд░реЛ рдлрдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдСрдкрд░реЗрд╢рди рдХреЛ рд╢рд┐рдлреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрди рдФрд░ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрдХреАрдирди рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ?

рдЬрдм рдореИрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпреВрдВрдЯ рдореЛрдб рдореЗрдВ рдордЬрдмреВрд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ рд╣реИред рдореИрде/рдмрд┐рдЧ/рдкреНрд░рд╛рдЗрдо.рдЧреЛ рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛

for i := int(s.bitLen()); i >= 0; i-- {

рднрд▓реЗ рд╣реА s.bitLen() рд░рд┐рдЯрд░реНрди рдЗрдВрдЯ рдиреЙрдЯ рдпреВрдВрдЯ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрд┐рдирд╛ рджреЗрдЦреЗ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдерд╛, рдФрд░ рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рднреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рдерд╛ рдХрд┐ рдХреБрдЫ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕реАрдПрд▓ рдЗрд╕реЗ рдпреВрдВрдЯ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд▓реВрдк рдХреЛ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд░рдХреНрд╖рд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЗрдиреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреВрдВрдЯ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдкреАрдЖрдИ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯ рд▓реМрдЯрд╛ рдФрд░ рд╢рд┐рдлреНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдВрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реИрд╕реЗ рднреА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢рд┐рдлреНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

(рдореИрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдкреВрд░реНрд╡-рдирд┐рд░реАрдХреНрд╖рдг рдореЗрдВ рдЧрд▓рддреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдареАрдХ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рдХреЛ рдЪреЛрдЯ рди рдкрд╣реБрдВрдЪрд╛рдПред)

рдореИрдВ рдЕрдиреБрдЧрд╛рдореА рд╢реВрдиреНрдп рдФрд░ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЯрдЯреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЗрдВрдЯ рд▓реМрдЯрдиреЗ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд╣реВрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрд▓ рд╢реЙрд░реНрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдФрд░ рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣реИрдВред рдкрд╛рд▓реА рдореЗрдВ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпреВрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рджреБрд░реНрд▓рдн рд╣реИрдВред

рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдЕрдкрд▓реЛрдб рдХрд┐рдПред рдЖрдЗрдП рдкреНрд░рддрд┐ +1 рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ int рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред

https://go-review.googlesource.com/36315

рдореИрдВ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреА рдЧрд┐рдирддреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ RotateLeft/Right рдХреЗ рд░реВрдк рдореЗрдВ uint рдЕрдиреНрдпрдерд╛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдорд╛рди рдЛрдгрд╛рддреНрдордХ рд╣реИ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдпрд╣ред

рдЕрдВрдд рдореЗрдВ, рд╣рдо Len рдмрд╛рдж рд╕реЗ LenN(x) == N - LeadingZerosN(x) рдХреЛ рднреА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд░рд╛рдп?

рдпрджрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрдм рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХреМрди рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдо рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Add / Sub / рдЖрджрд┐ред рдЬреЛ 2 рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ .

рдЖрдзрд╛рд░ 10 Len рд╕рдорд╛рд░реЛрд╣ рдкрд░ @gri рд╡рд┐рдЪрд╛рд░? рдпрд╣ рд╕рд┐рд░реНрдл ((N - clz(x) + 1) * 1233) >> 12

рдпрд╣ рдмреЗрд╕ 2 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо "рдмрд┐рдЯ рд╣реИрдХреА" рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред
рд╢реБрдХреНрд░, 10 рдлрд░рд╡рд░реА, 2017 рдХреЛ рд╢рд╛рдо 5:03 рдмрдЬреЗ рд░реЙрдмрд░реНрдЯ рдЧреНрд░рд┐рд╕реЗрдорд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдЕрдкрд▓реЛрдб рдХрд┐рдПред рдкреНрд░рддрд┐ +1 рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ
рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

https://go-review.googlesource.com/36315

рдореИрдВрдиреЗ рд░реЛрдЯреЗрдЯ рд▓реЗрдлреНрдЯ/рд░рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХрд╛рдЙрдВрдЯ рдХреЛ рдпреВрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ рдЕрдиреНрдпрдерд╛ рд╣рдо рдХрд░реЗрдВрдЧреЗ
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдорд╛рди рдЛрдгрд╛рддреНрдордХ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рд╣рдо рд▓реЗрди рдХреЛ рднреА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдирди (рдПрдХреНрд╕) == рдПрди -
рдЕрдЧреНрд░рдгреА рдЬрд╝реАрд░реЛрд╕рдПрди (рдПрдХреНрд╕)ред рд░рд╛рдп?

рдЕрдЧрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрдм рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо
рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░реЗрдВ
рд╕рдореАрдХреНрд╖рд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЕрдЧрд▓реЗ рдХрджрдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдФрд░ рдХреМрди рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝реЗрдВ/рдЙрдк/рдЖрджрд┐ рдЬреЛ 2 рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
рд▓реЗ рдЬрд╛рдирд╛, рдФрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдФрд░ рд▓реЗ рдЬрд╛рдирд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/golang/go/issues/18616#issuecomment-279107013 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AFnwZ_QMhMtBZ_mzQAb7XZDucXrpliSYks5rbQjCgaJpZM4Lg5zU
.

рднреАред рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рдЬреИрд╕реЗ AddN(x, y T) (sum T, overflow bool)

рд╢реБрдХреНрд░, 10 рдлрд░рд╡рд░реА, 2017 рдХреЛ рд░рд╛рдд 8:16 рдмрдЬреЗ, рдПрд░рд┐рдХ рд▓реЗрдЧрд░рдЧреНрд░реЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рднреАред рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдВрджрд░ рд░рд╣реВрдВрдЧрд╛
рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдкрдХреНрд╖ рдореЗрдВред рдЬреИрд╕реЗ AddN(x, y T) (рдпреЛрдЧ рдЯреА, рдУрд╡рд░рдлреНрд▓реЛ рдмреВрд▓)

рдХреНрдпрд╛ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ (рд▓реЗ рдЬрд╛рдирд╛/рдЙрдзрд╛рд░ рд▓реЗрдирд╛)?

рд╕рд╛рде рд╣реА, рдореИрдВ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рдлреНрд▓реЛ/рдХреИрд░реА/рдЙрдзрд╛рд░ рдХреЛ рдЯрд╛рдЗрдк рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ
рдмрд╣реБ-рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рддред

@ericlagergren (рдЖрдзрд╛рд░ 2) Len рдлрд╝рдВрдХреНрд╢рди, рдЬрдмрдХрд┐ рд▓рдЧрднрдЧ log2, рдЕрднреА рднреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдереЛрдбрд╝рд╛ рдЧрд┐рдирддреА рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдПрдХ рдЖрдзрд╛рд░ 10 Len рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕ рдмрд╛рдд рд╕реЗ рдХреЛрдИ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдХрдо рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ checked рдЕрдВрдХрдЧрдгрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдкрд╣рд▓реЗ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рддрд╛рдХрд┐ рд╣рдо рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдЧрддрд┐ рдХрд░ рд╕рдХреЗрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рддрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рдЦреБрд╢ рд╣реИрдВред

рдРрдб, рд╕рдм рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореИрдВ @minux рд╕реЗ рд╕рд╣рдордд

рдЧрдгрд┐рдд/рдЬрд╛рдВрдЪ рдкреИрдХреЗрдЬ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдШрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред checked.Add bits.Add рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред

@minux рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдВрдХрдЧрдгрд┐рдд рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред

@griesemer рдкреБрди: рдЖрдзрд╛рд░ 10 Len : рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ!

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдПрд▓ рдЬрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ @jimmyfrasche рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдирд╛рдо рдХреЗ рддрд╣рдд рд╣реЛрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред

рдЬреЛрдбрд╝реЗрдВ/рдЙрдк/рдореВрд▓ bits рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рдЧрдгрд┐рдд рд╣реА рдПрдХрдорд╛рддреНрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпреЗ "рд╡реНрдпрд╛рдкрдХ" рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкрд░рд┐рдЪрд╛рд▓рди рд╣реИрдВред рдРрдб/рд╕рдм рдХреЗ рд▓рд┐рдП рдХреИрд░реА/рдУрд╡рд░рдлреНрд▓реЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдПрдХ рдмрд┐рдЯ рдФрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдмреВрд▓рд┐рдпрди рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рдЗрди рдЪреЗрдиреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдРрдб-рд╡рд┐рдж-рдХреИрд░реА рдФрд░ рд╕рдмрдЯреНрд░реЗрдХреНрдЯ-рд╡рд┐рдж-рдЙрдзрд╛рд░ рднреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдореВрд▓ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

рдЪреЗрдХ/рд╡рд┐рд╕реНрддреГрдд рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рджреМрд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

"рд╣рд░ рдХреЛрдИ рдЬреЛ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ"

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореИрдВ рдкреЙрдкрдХрд╛рдЙрдВрдЯ рдирд╛рдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╣реИрдХрд░ рдбрд┐рд▓рд╛рдЗрдЯ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪреБрдЯрдХреА рд▓реА рд╣реИ, рдЬреЛ "рдкреЙрдк" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╛рд░реНрдЯреА рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рд▓реЗрдХрд┐рди "рдСрдиреНрд╕рдХрд╛рдЙрдВрдЯ" рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ "рдкреЙрдкрдХрд╛рдЙрдВрдЯ" рд╢рдмреНрдж рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЬреЛ рд▓реЛрдЧ рдЗрд╕реЗ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ рд╡реЗ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдкрд╛рдПрдВрдЧреЗред

рдЪреЗрдХ/рд╡рд╛рдЗрдб рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд: #6815ред рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдЪрд▓реЛ рдПрдХ рдЪрдХреНрдХрд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВ!

@griesemer рдиреЗ рд▓рд┐рдЦрд╛:

(рдЖрдзрд╛рд░ 2) рд▓реЗрди рдлрд╝рдВрдХреНрд╢рди, рдЬрдмрдХрд┐ рд▓рдЧрднрдЧ log2, рдЕрднреА рднреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдереЛрдбрд╝рд╛ рдЧрд┐рдирддреА рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдПрдХ рдмреЗрд╕ 10 рд▓реЗрди рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕ рдмрд╛рдд рд╕реЗ рдХреЛрдИ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдХрдо рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдХреНрдЯреВрдмрд░ рдореЗрдВ "рджрд╢рдорд▓рд╡ рдЕрдВрдХреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ" рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреБрдЫ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд░ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХреГрдд; рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рд╢рд╛рдпрдж рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рд╣реЛрдВрдЧреЗ, рдФрд░ рдпрд╣ рдареАрдХ рд╣реИред

@rogpeppe : PopCount рдХреЛ OnesCount рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ 4 рдердореНрд╕-рдЕрдк рднреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдП (рдЬреИрд╕реЗ PopCount рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡)ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ "рдЬрдирд╕рдВрдЦреНрдпрд╛ рдЧрдгрдирд╛" рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рддред

рдкреНрд░рддрд┐ @rsc , рдЕрднреА рдХреЗ рд▓рд┐рдП рдЪреЗрдХ/рд╡рд╛рдЗрдб рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкрд░рд┐рдЪрд╛рд▓рди рдЫреЛрдбрд╝рдХрд░ред

рд╕рд╛рде рд╣реА рдкреНрд░рддрд┐ @rsc , рд╕рднреА рдЧрдгрдирд╛ рдХрд╛рд░реНрдп int рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП (рдФрд░ #19113 рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддреЗ рд╣реБрдП), рд░реЛрдЯреЗрд╢рди рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП int рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╡рд╛рдо LenN рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдХреЗрд╡рд▓ N - LeadingZerosN ред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рди рд╕рдорд░реВрдкрддрд╛ RotateLeft / Right рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рд╣реИрдВред

TrailingZeroes рдФрд░ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдХреГрдкрдпрд╛ https://go-review.googlesource.com/36315 , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдкрд░ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдЕрдЧрд░ рд╣рдо рд╕рдм рдЦреБрд╢ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд░рд╡рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЕрдЧрд▓рд╛ рдХрджрдо:

  • рддреЗрдЬреА рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдкреНрд░рд╛рдердорд┐рдХ)
  • рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛ (рдорд╛рдзреНрдпрдорд┐рдХ)

рд╣рдо рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ

@minux рдЖрдкрдХрд╛ рдорддрд▓рдм рдирдпрд╛ рдЧрдгрд┐рдд/рдмрдбрд╝рд╛ рд╣реИ? рдХреНрдпрд╛ рдХрд╣реАрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

@TuomLarsen : @minux "рдирдП рдкреИрдХреЗрдЬ" рдХреЗ рд╕рд╛рде рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрдгрд┐рдд/рдмрд┐рдЧ рдХреЛ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХреГрдкрдпрд╛ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╣реЗрдВ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЦреЛрдЬрдиреЗ рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ - рдзрдиреНрдпрд╡рд╛рдж)ред

CL https://golang.org/cl/37140 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

рдХреНрдпрд╛ рдЧреЛ 1.9 рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдореЗрдВ рдХреЛрдИ рдХрдВрдкрд╛рдЗрд▓рд░-рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрддрд░рд┐рдХрдХрд░рдг рд╣реЛ рд░рд╣рд╛ рд╣реИ?

@cespare рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ (@khr?) рдЗрд╕рд╕реЗ рдЕрд▓рдЧ, рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдордВрдЪ-рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдЬрд┐рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдо рдЧрдгрд┐рдд/рдмрд┐рдЧ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрдгрд┐рдд/рдмрд┐рдЧ рдореЗрдВ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ рдЬреЛ рддреЗрдЬрд╝ рд╣реИред)

рдореЗрд░реА рдкреНрд▓реЗрдЯ рдкрд░, рдХрдо рд╕реЗ рдХрдо рдореЗрд╣рд░рд╛рдм рдХреЗ рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд░рддреЗ рд╣реИрдВ
(386, amd64, arm, arm64, s390x, mips, рд╢рд╛рдпрдж ppc64)ред

рд╢реБрдХреНрд░, рдлрд░рд╡рд░реА 17, 2017 рдЕрдкрд░рд╛рд╣реНрди 12:54 рдмрдЬреЗ, рд░реЙрдмрд░реНрдЯ рдЧреНрд░рд┐рд╕реЗрдорд░ < рд╕реВрдЪрдирд╛рдПрдВ @github.com

рд▓рд┐рдЦрд╛ рдерд╛:

@cespare https://github.com/cespare рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ (
@khr https://github.com/khr ?) рдЙрд╕рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ a
рд╕рднреНрдп рдордВрдЪ-рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред (рдПрдХ рдХрд╛рд░рдг рдЬреЛ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо
рдЧрдгрд┐рдд/рдмрдбрд╝реА рдореЗрдВ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ рдЬреЛ рддреЗрдЬрд╝ рд╣реИред)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/golang/go/issues/18616#issuecomment-280763679 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AGkgIIb8v1X5Cr-ljDgf8tQtT4Dg2MGiks5rdgkegaJpZM4Lg5zU
.

x86-64 рдкрд░ рдЬрдирд╕рдВрдЦреНрдпрд╛ рдЧрдгрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рд▓реЗрдЦ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╣рд╛рде рд╕реЗ рдХреЛрдбрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдЧрддрд┐ рдФрд░ рд╕рд░рд▓рддрд╛ рдореЗрдВ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЛ рдорд╛рдд рджреЗрддреА рд╣реИ - рдбреИрди рд▓реБрдЙ, рдЕрдХреНрдЯреВрдмрд░ 2014

CL https://golang.org/cl/38155 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

CL https://golang.org/cl/38166 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

CL https://golang.org/cl/38311 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

CL https://golang.org/cl/38320 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

CL https://golang.org/cl/38323 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред

рдХреБрдЫ рдФрд░ рдЪрд░реНрдЪрд╛:

рдореИрдВ:

рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ред рд░реЛрдЯреЗрдЯ рд▓реЗрдлреНрдЯ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрддрдВрдХ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХрд╛ рддрд░реНрдХ рд╢реВрдиреНрдп рд╕реЗ рдХрдо рд╣реИред
рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП RotateLeft рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрджрд┐ рдЗрд╕рдХрд╛ рддрд░реНрдХ рд╢реВрдиреНрдп рд╕реЗ рдХрдо рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рджрд┐рдирдЪрд░реНрдпрд╛ рд╣реЛрдиреЗ рд╕реЗ рдПрдХ рдШрдмрд░рд╛рд╣рдЯ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХрдареЛрд░ рд▓рдЧрддреА рд╣реИред рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рд╢реВрдиреНрдп рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд (рдЬреЛ рдШрдмрд░рд╛рд╣рдЯ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд░рд╛рд╢рд┐ рд╕реЗ рдШреБрдорд╛рд╡ рд╢рдмреНрдж рдЖрдХрд╛рд░ (рдЬреЛ рдШрдмрд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИ) рд╕реЗ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдбрд┐рд╡рд╛рдЗрдб-рдмрд╛рдп-рдЬреАрд░реЛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдШрдмрд░рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЙрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВрдЧреЗред рдЛрдгрд╛рддреНрдордХ рд░рд╛рд╢рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдШреБрдорд╛рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ RotateLeft рдФрд░ RotateRight рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЕрдм рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдирдХ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╣рдо рдпрд╣рд╛рдВ рдХреБрдЫ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдлреНрд░реАрдЬ рдХрд░рдХреЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрд╛рд░ рдЧреЛ 1.9 рдЖрдЙрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рд╣рдо рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред

рд░реЛрдм:

рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛, рдШреБрдорд╛рдПрдВ, рдЬреЛ рдмрд╛рдПрдВ рдХреЗ рд▓рд┐рдП рд╕рдХрд╛рд░рд╛рддреНрдордХ рдФрд░ рджрд╛рдПрдВ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рд▓реЗрддрд╛ рд╣реИред

рдореИрдВ:

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ
рдмрд┐рдЯреНрд╕ред рдШреБрдорд╛рдПрдБ (x, -5)

рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдШреВрдорддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рдмрд┐рдЯреНрд╕.рд░реЛрдЯреЗрдЯрд░рд╛рдЗрдЯ(5)
рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЧрдгрд┐рдд/рдмрд┐рдЯреНрд╕ рдореЗрдВ рджреЛ рдмрд╛рд░ рдШреБрдорд╛рдПрдБ * рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

рдорд╛рдЗрдХрд▓ рдЬреЛрдиреНрд╕:

рд╕рд╛рдЗрди рд░реЛрдЯреЗрдЯ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЛрдб рдореЗрдВ рдХреВрджрдирд╛, рд╣рд╛рдБ? рдЕрдлрд╝рд╕реЛрд╕ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ:

рдирд╣реАрдВ, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИред рдХрдо 6 рдмрд┐рдЯреНрд╕ (64-рдмрд┐рдЯ рд░реЛрдЯреЗрдЯ рдХреЗ рд▓рд┐рдП) рдХреЛ рдорд╛рд╕реНрдХ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓ рд░реЛрдЯреЗрдЯ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдзреА рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдШрдмрд░рд╛рд╣рдЯ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдШреБрдорд╛рдПрдБ рд╡реИрд╕реЗ рднреА рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реЛрдВрдЧреЗ рдХрд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рддрд░реНрдХ рдмрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рддрд░реНрдХ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдВрддрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ RotateLeft рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рдирд┐рдореЛрдирд┐рдХ рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред

@bcmills @robpike рдЗрд╕ рд╕рдЯреАрдХ рд╡рд┐рд╖рдп рдХреА рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рднреА рджреЗрдЦреЗрдВ https://github.com/golang/go/issues/18616#issuecomment -275598092 рдФрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА

@ рдЬреЛрд╢реЗрд░рд┐рдпрди рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреА рд╣реИрдВ рдФрд░ рдЕрднреА рднреА рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдХрд╢реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди, рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЛрдЯреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдЗрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЙрди рд╕рднреА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдмрд╛рдИрдВ рдУрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ рдЬреЛ рдШреБрдорд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рд╡рд╣ рдмрд╛рдИрдВ рдУрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ рдПрдХ рдШреБрдорд╛рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЦреБрдж рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╣реИ "рдЧреАрдЬрд╝, рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╣реИ? рдпрд╣ рд╢рд╛рдпрдж рдмрдЪрд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦрдирд╛

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдкрдардиреАрдпрддрд╛ рд╣реИ, time.Duration API рдХреА рддрд░реНрдЬ рдкрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ:

const RotateRight = -1

bits.Rotate(x, 5 * RotateRight)

рд╢рд╛рдпрдж рдмрд┐рдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░рдВрддрд░ рдпрд╛ рдкрд╛рдардХ (рдХреЙрд▓ рд╕рд╛рдЗрдЯ) рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдПрдХ рдЕрднреНрдпрд╛рд╕?

@aclements рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕рдорд╛рди рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реЗ рджреЛ (рдЧреБрдирд╛ рдПрди рдкреНрд░рдХрд╛рд░) рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рддрд░реНрдХ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред рдЕрдм рд╣рдо рдЗрд╕реЗ рдРрдб рдФрд░ рд╕рдм рдХреЗ рд▓рд┐рдП рд╕рд╣рди рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдВрдЦреНрдпрд╛ рдЕрдХреНрд╖ рдкрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рджрд╛рдИрдВ рдУрд░ рдмрдврд╝рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯреНрд╕ рдХреЛ рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд-рдмрд╛рдп-рд╕рд╛рдЗрди рд░реЛрдЯреЗрдЯ/рд╢рд┐рдлреНрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ [рджрд╕реНрддрд╛рд╡реЗрдЬ] рд╡рд┐рдкрд░реАрдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ @cznic рдмрд┐рдЯреНрд╕ рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ

рдореИрдВ рднреА рдХреЗрд╡рд▓ Rotate (https://github.com/golang/go/issues/18616#issuecomment-275016583) рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рджрд┐рд╢рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @aclements рдЪрд┐рдВрддрд╛ рдХреЗ рдкреНрд░рддрд┐рд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ: рдПрдХ RotateLeft рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЬреЛ рд╕рд╣реА рдШреВрд░реНрдгрди рдХрд░рддреЗ рд╕рдордп рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЭреВрдареА рднрд╛рд╡рдирд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ: "рдпрд╣ RotateLeft рдХрд╣рддрд╛ рд╣реИ рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдШреВрд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЕрдзрд┐рдХрд╛рд░!"ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдЧрд░ рдпрд╣ RotateLeft рдХрд╣рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рди рдХрд░реЗрдВред

рд╕рд╛рде рд╣реА, bits.Rotate рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЛрдб рдореЗрдВ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд░рддреЗ рд╣реИрдВред рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡реЗ рдШреВрд░реНрдгрди рдХреА рд╕рдорд░реВрдкрддрд╛ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗред

@рдирд╛рдердиреА

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдмрд┐рдЯреНрд╕ рджрд╛рдПрдБ-рд╕реЗ-рдмрд╛рдПрдБ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ

рдмрд┐рдЯреНрд╕ рд╕рд┐рд░реНрдл рдмрд╛рдЗрдирд░реА рдЕрдВрдХ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдЖрдзрд╛рд░ рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреЛ рдмрд╛рдПрдБ рд╕реЗ рджрд╛рдПрдБ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ, рдпрджрд┐ рд╕рднреА рдирд╣реАрдВ, рддреЛ рджрд╛рдПрдБ-рд╕реЗ-рдмрд╛рдПрдБ рд▓реЗрдЦрди рдкреНрд░рдгрд╛рд▓реАред 123 рдПрдХ рд╕реМ рддреЗрдИрд╕ рд╣реИ, рддреАрди рд╕реМ рдЗрдХреНрдХреАрд╕ рдирд╣реАрдВред

рд╡рд╣ рдЕрдВрдХ рдХреЗ рдЧреБрдгрдХ рдХрд╛ рдШрд╛рдд рджрд╛рд╣рд┐рдиреА рдУрд░ рдШрдЯрддрд╛ рд╣реИ рд╡рд╣ рдЕрд▓рдЧ рдмрд╛рдд рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдореБрдЭреЗ рджрд┐рд╢рд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд▓реНрдкрдирд╛ рдХреА рдмрд╛рдд рд╣реИред

рдореБрдЭреЗ рдШреБрдорд╛рдирд╛ рдкрд╕рдВрдж рд╣реИред рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ 0 рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдХреГрдкрдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп RotateLeft рдФрд░ RotateRight рджреЛрдиреЛрдВ рд░рдЦреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдзреЗ рдбреЗрд╡рд▓рдкрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдпрд╛рдж рд░рдЦ рд╕рдХреЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

99% рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрднреА рднреА рдШреБрдорд╛рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рджрд┐рд╢рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рд╣реИред рдПрдХ рдХреЙрд▓ рдХрд╛рдлреА рд╣реИред

рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрдЧрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рдареАрдХ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдПрдХ рд╣реА рд╣реЛрдиреЗ рд╕реЗ рд╡рд╣ рд╕рд╛рд░рд╛ рддрд░реНрдХ рдорд┐рдЯ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрд▓реАрдирд░ рдбрд┐рдЬрд╛рдЗрди рд╣реИред

рдореИрдВ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрд╡рдЪреНрдЫ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдЦрддреЗ рд╣реБрдП "рд░реЛрдЯреЗрдЯ рд░рд╛рдЗрдЯ" рд╕реЗ "рд░рд╛рдЗрдЯ" рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдирд╛рдо рдЙрдард╛рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ рдпрд╣ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рджрд┐рд╢рд╛ рдмрдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдмрд╛рдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╢рд╛рдпрдж рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд░реЛрдЯреЗрдЯ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рдЙрдард╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрддрд╛ рд╣реИред
RotateRight рдмрд╣реБрдд рдХрдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рдЙрдард╛рддрд╛ рд╣реИ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЪрд╛рд╣рд┐рдП) рдпрджрд┐ рд╡реЗ рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред

рджреВрд╕рд░реА рдУрд░ рд░реЛрдЯреЗрдЯ рд╢рд╛рдпрдж рд▓реЛрдЧреЛрдВ рдХреЛ if n < 0 { RotateLeft(...) } else { RotateRight(...) } рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред

@ golang/рдкреНрд░рд╕реНрддрд╛рд╡-рд╕рдореАрдХреНрд╖рд╛ рдиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдХреЙрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ RotateLeft , рди рдХрд┐ рдХреЗрд╡рд▓ Rotate ред рдЛрдгрд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдПрдБ рджрд╛рдИрдВ рдУрд░ рдШреВрдорддреА рд╣реИрдВ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ред

CL https://golang.org/cl/40394 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

CL https://golang.org/cl/41630 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдкреВрд░реНрдг" рд▓рдЧрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрдгрдп рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

  • рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВ / mul / рдЖрджрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИ
  • рдРрдб/рдореВрд▓/рдЖрджрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреИрд░реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд▓рд╕ рдХреИрд░реА (рдпрд╛ рдЙрдЪреНрдЪ рд╢рдмреНрдж) рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ "рдмрд┐рдЯреНрд╕" рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВ (рд╢рд╛рдпрдж рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ)ред рдмрд╣реБ-рд╕рдЯреАрдХ рдРрдб/рд╕рдм/рдореБрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рдЧрдгрд┐рдд/рдмрдбрд╝реЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╢реБрджреНрдз рдЧреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рд╕рд╣реА рд╣реИ: рд╣рдо рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рд╡реИрдХреНрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реНрдиреЗрд▓ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХрддрдо рдЙрди рдЧреБрдард▓реА рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рдиред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЕрдХреЗрд▓реЗ рдРрдб/рд╕рдм/рдореВрд▓ "рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ "рд╣реЛ рдЧрдпрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдмрдбрд╝реА рдЖрдкрддреНрддрд┐ рди рд╣реЛред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рддрдХ рдмреЛрд▓реЗрдВред

рдореИрдВ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рдореЗрд░рд╛ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВ, рдЕрдЧрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдЙрдирдХреА рд╕рд╛рдореВрд╣рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

:+1: рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ рдФрд░ :рджрд┐рд▓: рдЕрдм рддрдХ рдХрд┐рдП рдЧрдП рдХрд╛рдо рдХреЗ рд▓рд┐рдПред

рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрд╣ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реИред

Rotate рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХрд╛рд░реНрдп рд╣реИ; рд╕рдВрджрд░реНрдн рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП LTR рдпрд╛ RTL рдХреЗрд╡рд▓ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред @aclements рдиреЗ рдПрдХ рд╡реИрдз рдкреНрд░рд╢реНрди рд▓рд╛рдпрд╛, рди рдХрд┐ рдПрдХ рд╡реИрдз-рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБред рдЙрдирдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ "рдпрд╣ рдЖрд░рдЯреАрдПрд▓ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рд╡реГрджреНрдзрд┐"; рдЖрд╕рд╛рди, рд╣реИ рдирд╛?

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЪрддреБрд░рд╛рдИ рдЖрддреА рд╣реИред

"рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╕рдорд╛рд░реЛрд╣" рдХрд╛ рдЕрд░реНрде рдЗрддрдиреА рд╕рд░рд▓ рдмрд╛рдд рд╣реИ, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдХреЛрдб рдирдореВрдиреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдб рдХреА рд░реЗрдЦрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдШреБрдорд╛рд╡ рдФрд░ рджрд┐рд╢рд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдПрд╕рд╕реАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред

рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╢рд╛рдВрдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рдмрд┐рдЯреНрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рдорд╛рдирдХ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдЯреАрдПрд▓ рдХреЛ рдЪреБрди рд╕рдХрддрд╛ рдерд╛, рдмрд▓реНрдХрд┐, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ 1.9 рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдордХрдХреНрд╖ рдХреЗ рд░реЛрдЯреЗрдЯ рд▓реЗрдлреНрдЯ рдвреВрдВрдв рд▓рд┐рдпрд╛ рдФрд░ рдбреЙрдХреНрдЯрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд░рд╣рд╛ рдерд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдХрджрдоред рдпрд╣ рдПрдХ рджрд┐рдорд╛рдЧ рд╕реБрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдорд┐рддрд┐ рдЬреИрд╕рд╛ рдирд┐рд░реНрдгрдп рд╣реИ рдЬрд┐рд╕рдХрд╛ 1.9 рдореЗрдВ рдЙрддрд░рдирд╛ рдмрд╣реБрдд рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред

рдореИрдВ рдХреЗрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╕рдм рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, "рд╣рдо RotateLeft рдХреЛ рдПрдХ рд╕рдордХрдХреНрд╖ рдХреНрдпреЛрдВ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдирдХрд╛рд░рд╛рддреНрдордХ рдХрджрдореЛрдВ рд╕реЗ рдХреНрдпреЛрдВ рдШрдмрд░рд╛ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП int рдмрдирд╛рдо uint рдкрд░ рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ"; рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╕рдорд╛рд░реЛрд╣" рдХрд╛ рдЕрд░реНрде рдЪрд╛рд▓рд╛рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдЗрдП рд╣рдо рдПрдкреАрдЖрдИ рдХреЗ рдФрдЪрд┐рддреНрдп рдореЗрдВ рдЪрддреБрд░рд╛рдИ рд╕реЗ рдмрдЪреЗрдВред рдпрд╣ рдЗрд╕ 1.9 рдЕрдкрдбреЗрдЯ рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдмрджрд▓реЗрдВ https://golang.org/cl/90835 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: cmd/compile: arm64 intrinsics for math/bits.OnesCount

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

go101 picture go101  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ashb picture ashb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lkarlslund picture lkarlslund  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

enoodle picture enoodle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jayhuang75 picture jayhuang75  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ