การเลื่อนวน

จากวิกิพีเดีย สารานุกรมเสรี
ไปยังการนำทาง ไปยังการค้นหา
การเลื่อนวนทางซ้ายหนึ่งบิต
การเลื่อนวนทางขวาหนึ่งบิต

ในทางคณิตศาสตร์เชิงการจัด การเลื่อนวน (อังกฤษ: circular/cycle/cyclic shift) คือการเรียงสับเปลี่ยนของ n สิ่งอันดับ ที่ซึ่งสมาชิกสุดท้ายจะกลายเป็นสมาชิกแรก หรือสมาชิกแรกกลายเป็นสมาชิกสุดท้าย แล้วสมาชิกอื่นๆ จะถูกเลื่อนไปแทนที่โดยไม่สลับกัน เปรียบได้กับการเรียงสับเปลี่ยนที่มีการวนรอบ

ตัวอย่างเช่น การเลื่อนวนของสามสิ่งอันดับ (a, b, c) ได้แก่

  • (a, b, c)
  • (c, a, b)
  • (b, c, a)

ในทางวิทยาการคอมพิวเตอร์ การเลื่อนวน คือตัวดำเนินการเลื่อนชนิดหนึ่งที่จะเลื่อนบิตทั้งหมดของตัวถูกดำเนินการเป็นวงรอบ โดยการเลื่อนวนจะไม่สงวนบิตบอกเครื่องหมาย และจะไม่แยกเลขชี้กำลังออกจากแมนทิสซาเหมือนการเลื่อนเชิงคำนวณ (arithmetic shift) และการเลื่อนวนจะไม่เติมตำแหน่งบิตที่ว่างด้วยศูนย์ดังเช่นการเลื่อนเชิงตรรกะ (logical shift) แต่จะนำบิตที่เลื่อนออกไปมาใส่แทนที่ การเลื่อนวนแบบนี้มี 2 ทางคือวนไปทางซ้ายและวนไปทางขวา การเลื่อนวนมักใช้ในวิทยาการเข้ารหัส โดยเป็นส่วนหนึ่งของการเรียงสับเปลี่ยนของลำดับบิต

ตัวอย่างเช่น การเลื่อนวนของ 0001 0111 ไปหนึ่งบิต ตามแผนภาพ จะได้คำตอบคือ

  • วนไปทางซ้าย จะได้ 0010 1110
  • วนไปทางขวา จะได้ 1000 1011