ฉันชอบเล่นกอล์ฟdcแต่บางครั้งฉันก็รู้สึกท้อแท้เพราะdcไม่มีปฏิบัติการในระดับบิต
ท้าทาย
ให้สี่ฟังก์ชั่นการตั้งชื่อที่ใช้เทียบเท่าของการดำเนินงานคบิต&, |, ~และ^(บิต AND, OR, NOT และแฮคเกอร์) แต่ละฟังก์ชันจะใช้ตัวถูกดำเนินการสองตัว ( ~รับเพียงตัวเดียว) ซึ่งเป็นจำนวนเต็มอย่างน้อย 32 บิตที่ไม่ได้ลงชื่อ แต่ละฟังก์ชั่นจะคืนค่าจำนวนเต็มที่ไม่ได้ลงนามซึ่งมีความกว้างบิตเท่ากับตัวถูกดำเนินการ
การ จำกัด
คุณสามารถใช้การดำเนินการที่ได้รับการสนับสนุนdcเท่านั้น เหล่านี้คือ:
+-*/การบวกการลบการคูณและการหารทางคณิตศาสตร์~modulo (หรือ divmod หากภาษาของคุณรองรับ)^การยกกำลัง|การยกกำลังแบบแยกส่วนvรากที่สอง>>===!=<=<ผู้ประกอบการความเสมอภาค / ความไม่เท่าเทียมกันมาตรฐาน>><<ผู้ประกอบการเปลี่ยนบิตdcไม่มีสิ่งเหล่านี้ แต่เนื่องจากมีการใช้งานเพียงเล็กน้อยในแง่ของการหาร / การคูณด้วยพลังของ 2 ดังนั้นฉันจะอนุญาตสิ่งเหล่านี้
โครงสร้างการควบคุมในการdcสร้างของฉันอย่างงุ่มง่ามโดยใช้มาโคร (แบบเรียกซ้ำ) และการดำเนินการที่เท่าเทียมกัน คุณสามารถใช้โครงสร้างการควบคุมที่มีอยู่ในภาษาของคุณ
คุณยังอาจจะใช้ดำเนินการทางตรรกะ แม้ว่าเหล่านี้ไม่ได้โดยตรงที่มีอยู่ใน&& || !dc
คุณต้องไม่ใช้ผู้ประกอบการระดับบิต & , |, ~และ^หรือฟังก์ชั่นใด ๆ ที่นิด ๆ ใช้พวกเขา
นอกจากนี้คุณต้องไม่ใช้ตัวดำเนินการหรือฟังก์ชันการแปลงเบสสตริงในตัว
โปรดลองเสนอโปรแกรมทดสอบหรือตัวอย่างข้อมูลคอมไพเลอร์ออนไลน์ (ไม่รวมอยู่ในคะแนนกอล์ฟ) เพื่อช่วยยืนยันคำตอบของคุณ