Lubię grać w golfa dc, ale czasami jestem sfrustrowany, ponieważ dcnie mam operacji bitowych.
Wyzwanie
Zapewnić cztery nazwach funkcji, które implementują odpowiednik operacji c bitowe &, |, ~oraz ^(bitowe AND, OR, NOT i XOR). Każda funkcja przyjmuje dwa operandy ( ~zajmuje tylko jeden), które są co najmniej 32-bitowymi liczbami całkowitymi bez znaku. Każda funkcja zwróci liczbę całkowitą bez znaku o tej samej szerokości bitów co argumenty.
Ograniczenie
Możesz używać tylko operacji obsługiwanych przez dc. To są:
+-*/Dodawanie, odejmowanie, mnożenie i dzielenie arytmetyczne~modulo (lub divmod, jeśli Twój język to obsługuje)^potęgowanie|modułowe potęgowanievpierwiastek kwadratowy>>===!=<=<standardowe operatory równości / nierówności>><<operatorzy zmiany bitów.dcnie ma ich, ale ponieważ są one trywialnie realizowane w kategoriach dzielenia / mnożenia przez potęgi 2, pozwolę na to.
Struktury kontrolne mogą dcbyć niezgrabnie budowane przy użyciu (rekurencyjnych) makr i (nie) operacji równości. Możesz używać dowolnych wbudowanych struktur kontrolnych, które posiada Twój język.
Możesz także użyć operatorów logicznych && || ! , nawet jeśli nie są one bezpośrednio dostępne w dc.
Ci nie muszą stosować operatory bitowe & , |, ~i ^ani żadnych funkcji, które implementują je trywialnie.
Ponadto nie wolno używać wbudowanych operatorów lub funkcji konwersji ciągów bazowych.
Zastanów się też nad udostępnieniem programu testowego lub fragmentu kompilatora online (nieuwzględnionego w wynikach golfa), aby pomóc w weryfikacji odpowiedzi.