おそらく求めてるのはこれでしょう
例としてNを32bit整数、hibit(x)を32bit整数xの上位16bit、lobit(x)を下位16bitだとしたとき、
N = hibit(N) << 16 + lobit(N)
が成り立ちます。
なので
N^2 = hibit(N)^2 << 32 + 2 * hibit(N) * lobit(N) << 16 + lobit(N)^2
計算結果は64bitで表せるので、上位32bitをleft、下位32bitをrightに入れるとすると
right = lobit(2 * hibit(N) * lobit(N)) << 16 + lobit(N)^2 - [オーバーフロー分]
left = hibit(N)^2 + 2 * hibit(N) * lobit(N) >> 16 + [rightがオーバーフローしてたら1]
こんな感じで計算できます。(hibit(x)もlobit(x)も16bitで表せる数なので、それらの積は32bitに収まります)
ただし実装するにあたっては、2 * hibit(N) * lobit(N)が32bitを超えた場合にどうなるかとかどうやってrightのオーバーフローを検知するかで難易度も変わってくるので、Nが32bitフルに使わなくても表せるような数だった場合には余裕のある分割の仕方に変えることも検討してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。