Saya suka bermain golf dc
, tapi kadang-kadang saya frustrasi karena dc
tidak memiliki operasi bitwise.
Tantangan
Menyediakan empat fungsi bernama yang menerapkan setara dengan operasi c bitwise &
, |
, ~
dan ^
(bitwise AND, OR, NOT dan XOR). Setiap fungsi akan mengambil dua operan ( ~
hanya satu) yang setidaknya merupakan bilangan bulat 32-bit yang tidak ditandatangani. Setiap fungsi akan mengembalikan bilangan bulat tanpa tanda dengan lebar bit yang sama dengan operan.
Larangan
Anda hanya dapat menggunakan operasi yang didukung oleh dc
. Ini adalah:
+
-
*
/
Penambahan aritmatika, pengurangan, perkalian dan pembagian~
modulo (atau divmod jika bahasa Anda mendukungnya)^
eksponensial|
eksponensial modularv
akar pangkat dua>
>=
==
!=
<=
<
operator kesetaraan / ketidakmerataan standar>>
<<
operator bit shift.dc
tidak memiliki ini, tetapi karena mereka sepele diimplementasikan dalam hal pembagian / perkalian dengan kekuatan 2, maka saya akan mengizinkan ini.
Struktur kontrol di dc
saya dibuat dengan canggung menggunakan makro (rekursif) dan operasi kesetaraan (dalam). Anda dapat menggunakan struktur kontrol bawaan apa saja yang dimiliki bahasa Anda.
Anda juga dapat menggunakan operator logis &&
||
!
, meskipun ini tidak tersedia secara langsung di dc
.
Anda tidak harus menggunakan operator bitwise &
, |
, ~
dan ^
atau fungsi yang sepele menerapkannya.
Selain itu, Anda tidak boleh menggunakan operator atau fungsi konversi-dalam-string-basis-bawaan.
Harap pertimbangkan untuk memberikan program pengujian atau cuplikan kompiler online (tidak termasuk dalam skor golf) untuk membantu memverifikasi jawaban Anda.