यदि प्रदर्शन की परवाह नहीं है, तो आपका कोड बिल्कुल ठीक है। अन्यथा आप कुछ अलग कर सकते हैं।
उदाहरण के लिए Erlang मनमाने ढंग से आकार के पूर्णांकों का समर्थन करता है:
binary_and(A, B) ->
Size = bit_size(A),
<<X:Size>> = A,
<<Y:Size>> = B,
<<(X band Y):Size>>.
या आप अपने स्वयं के द्विआधारी ज़िप दिनचर्या handcraft कर सकते हैं:
binary_and(A,B) -> binary_and(A, B, <<>>).
binary_and(<<A:8, RestA/bytes>>, <<B:8, RestB/bytes>>, Acc) ->
binary_add(RestA, RestB, <<Acc/bytes, (A band B):8>>);
binary_and(<<>>, <<>>, Result) -> Result.
या अनुकूलित संस्करण:
binary_and(A,B) -> binary_and(A, B, <<>>).
binary_and(<<A:64, RestA/bytes>>, <<B:64, RestB/bytes>>, Acc) ->
binary_add(RestA, RestB, <<Acc/bytes, (A band B):64>>);
binary_and(<<A:8, RestA/bytes>>, <<B:8, RestB/bytes>>, Acc) ->
binary_add(RestA, RestB, <<Acc/bytes, (A band B):8>>);
binary_and(<<>>, <<>>, Result) -> Result.
या अधिक परिष्कृत
binary_and(A,B) -> binary_and({A, B}, 0, <<>>).
binary_and(Bins, Index, Acc) ->
case Bins of
{<<_:Index/bytes, A:64, _/bytes>>, <<_:Index/bytes, B:64, _/bytes>>} ->
binary_add(Bins, Index+8, <<Acc/bytes, (A band B):64>>);
{<<_:Index/bytes, A:8, _/bytes>>, <<_:Index/bytes, B:8, _/bytes>>} ->
binary_add(Bins, Index+1, <<Acc/bytes, (A band B):8>>);
{<<_:Index/bytes>>, <<_:Index/bytes>>} -> Acc
end.
वैसे भी आपको उपाय करना होगा यदि आप वास्तव में प्रदर्शन में रुचि रखते हैं। आपके उद्देश्यों के लिए पहला सबसे तेज़ हो सकता है।
जब द्विआधारी उपयोग अनुकूलन पर कुछ संकेत प्राप्त करने के लिए संकलन 'bin_opt_info' विकल्प का उपयोग करें। विवरण के लिए संकलन मैनुअल देखें। – Zed