TGViewer
Go tests Go tests @golangtests · 7.84K subscribers
Post #908 2.92K
Хитрая Go-задача:


package main

import "fmt"

type uint128 struct {
Hi uint64
Lo uint64
}

func f(φ uint128, β int) uint32 {
return uint32(φ.Hi >> (63 - β))
}

func main() {
x := uint128{Hi: 0x8000000000000001}

fmt.Println(f(x, 0))
fmt.Println(f(x, 1))
fmt.Println(f(x, 63))
}


Вопросы:

Что выведет код?
Что будет при β = 64?
Можно ли объявить одновременно beta и β?

Ожидаемый ответ:

1
2
1

Подвох:

сдвиг зависит от β
возможен отрицательный shift
обрезание до uint32
beta и β - разные переменные


• Вам нужно понять, как работает сдвиг вправо
заметить, что в конце результат режется до uint32

• увидеть, что при β = 64 получится отрицательный сдвиг:

63 - 64 = -1
и ещё понять, что beta и β в Go - это разные имена переменных

То есть с виду задача про один shift, а на деле она проверяет сразу несколько знаний.


Запустить код: https://go.dev/play/

Полезные ресурсы Go 🚀Max

@golangtests
  • 👎 15
  • ❤ 3
  • 🔥 2
  • 👍 1
More from @golangtests
  1. Sep 13, 2026👣 Задача на Go 1.27: concurrent job scheduler с generic methods Нужно реализовать библиот…
  2. Sep 13, 2026🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть…
  3. Sep 2, 2026👣 Go 1.27: почему две разные closure внезапно могут иметь одинаковый адрес функции? Что в…
  4. Aug 21, 2026Go-задача: что выведет этот код? package main import "fmt" func main() { var funcs []func(…
  5. Aug 6, 2026Задача Go 1.26, на которой легко ошибиться даже опытному разработчику Что выведет этот код…
  6. Jul 27, 2026🧠 Редкая задача для Go-разработчиков Версия: Go 1.23+ Именно в Go 1.23 появился range по…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →