Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Math With Ruby:Modulo Operator, Binary &More

คุณจำเป็นต้องรู้คณิตศาสตร์เพื่อเป็นโปรแกรมเมอร์ที่ดีหรือไม่

มันขึ้นอยู่กับ!

หากคุณกำลังจะเขียนแอป CRUD ทั้งวัน คุณก็ไม่จำเป็นต้องรู้คณิตศาสตร์มากนัก หากมี

แต่ถ้าคุณต้องการทำสิ่งที่น่าสนใจมากขึ้น เช่น การแก้ปัญหาด้านการเขียนโค้ดและเตรียมพร้อมสำหรับการสัมภาษณ์เกี่ยวกับการเขียนโค้ด การเรียนรู้แนวคิดพื้นฐานสองสามข้อก็มีประโยชน์

วันนี้คุณจะได้เรียนรู้เกี่ยวกับ :

  • ตัวดำเนินการโมดูโล (% )
  • ระบบตัวเลข
  • บิตมาสก์

คุณจะได้เรียนรู้วิธีใช้แนวคิดเหล่านี้ใน Ruby ดังนั้น นี่จึงเป็นแนวทางปฏิบัติ

มาทำสิ่งนี้กันเถอะ!

ตัวดำเนินการ Ruby Modulo

ตัวดำเนินการ Ruby modulo มีลักษณะดังนี้:

%

ใช่ เช่นเดียวกับสัญลักษณ์เปอร์เซ็นต์

มันทำอะไร?

โมดูโลโอเปอเรเตอร์ให้ส่วนที่เหลือของดิวิชั่น . สามารถใช้กับสิ่งต่างๆ เช่น ตรวจสอบว่าตัวเลขเป็นเลขคู่หรือคี่

ใช่.

ใน Ruby เรามี even? /odd? วิธีการ

ตัวอย่าง :

8.even?
# true

5.even?
# false

แต่ถ้าคุณต้องการตรวจสอบว่าตัวเลขหารด้วย 3 ลงตัวหรือไม่ คุณต้องใช้ตัวดำเนินการโมดูโล

ตัวอย่าง :

9 % 3 == 0
# true

มาสำรวจการใช้งานเพิ่มเติมกัน!

การใช้งานจริงสำหรับตัวดำเนินการโมดูโล่

คุณสามารถใช้โมดูโล่เพื่อตรวจสอบว่า ตัวเลขหารด้วยตัวเลขอื่นได้หรือไม่ .

ตัวเลขจะหารลงตัวถ้าเหลือ 0

ตัวอย่าง :

ความท้าทายในการเขียนโค้ด “FizzBuzz” สุดคลาสสิกอยากให้คุณค้นหาว่าตัวเลขนั้นหารด้วย 3 หรือ 5 ลงตัวหรือไม่

if n % 3 == 0
  puts "Fizz"
end

if n % 5 == 0
  puts "Buzz"
end

คุณสามารถใช้ modulo โอเปอเรเตอร์ทำสิ่งต่าง ๆ ทุก ๆ น.

ถูกใจสิ่งนี้ :

(1..10).select { |n| n % 2 == 0 }
# [2, 4, 6, 8, 10]

หรือคุณสามารถใช้ step วิธีการ:

(2..10).step(2).to_a
# [2, 4, 6, 8, 10]

การใช้วิธีการ Divmod

อีกวิธีหนึ่งสำหรับตัวดำเนินการโมดูโลคือการแปลงนาทีเป็นชั่วโมง + นาทีที่เหลือ

ตัวอย่าง :

เรามี 90 นาที ซึ่งเท่ากับ 1 ชั่วโมง 30 นาที

hours, minutes = 90.divmod(60)
# [1, 30]

สังเกต divmod วิธีการ:

มันทำการดิวิชั่น &โมดูโล (ส่วนที่เหลือของดิวิชั่น) ในเวลาเดียวกัน

มีประโยชน์มาก!

ทำความเข้าใจระบบตัวเลข

ระบบตัวเลขเป็นวิธีการแสดงตัวเลข

ในการใช้ตัวเลขในแต่ละวัน คุณใช้ระบบทศนิยม .

0123456789

ระบบตัวเลขประกอบด้วยชุดตัวเลขและบางครั้งก็เป็นอักขระด้วย

ตัวอย่างเช่น :

ระบบเลขฐานสิบหกใช้สัญลักษณ์ทั้งหมด 16 ตัว

0123456789abcdef

นี่คือตารางระบบตัวเลขทั่วไป :

ชื่อ จำนวนสัญลักษณ์ สัญลักษณ์
ฐานสิบหก 16 0123456789abcdef
ทศนิยม 10 0123456789
Octal 8 01234567
ไบนารี 2 01

คุณสามารถแปลงระหว่างระบบตัวเลขใน Ruby ด้วย to_s วิธีการ

ต่อไปนี้เป็นวิธีแปลงจากทศนิยม (9 ) เป็น ไบนารี (1001 ):

9.to_s(2)
# "1001"

คุณสามารถใช้ to_i เมธอดบนสตริงเพื่อแปลงกลับเป็นจำนวนเต็ม

ดังนั้นหากคุณต้องการเปลี่ยนจาก เลขฐานสิบหก (ff ) เป็น ทศนิยม (255 ) คุณสามารถทำได้:

"ff".to_i(16)
# 255

โดยที่ 16 คือ “จำนวนสัญลักษณ์” หรือฐานของตัวเลข

Bitmasking คืออะไร

คุณคงไม่ตื่นมาทุกวันเพราะคิดว่า…

"เฮ้! ฉันต้องการ แพ็คค่าบูลีนจำนวนมาก ลงพื้นที่ให้น้อยที่สุด”

แต่ถ้าวันใดคุณต้องทำเช่นนั้น…

เทคนิคดีๆ ที่ช่วยคุณได้คือ “บิตมาสก์”

ด้วยบิตมาสก์ คุณสามารถแพ็คค่าบูลีนจำนวนมากเป็นค่าจำนวนเต็มเดียวได้

เป็นไปได้ยังไง?

โดย ใช้แต่ละบิต ที่หมายเลขนั้นทำขึ้น

เนื่องจากค่าบูลีนสามารถแสดงด้วยบิตเดียว และค่าจำนวนเต็มมี 64 บิต เราจึงสามารถแพ็คค่าบูลีนได้สูงสุด 64 ค่าเป็นตัวเลขเดียว

เราจะใช้ตัวดำเนินการระดับบิต

นี่คือตาราง :

ชื่อ สัญลักษณ์ ใช้
XOR (Exclusive OR) ^ สลับบิต
และ & ตรวจสอบบิต
ไม่ ~ เคลียร์บิต
หรือ | ตั้งค่าบิต

ตัวดำเนินการ Bitwise ทำงานที่ระดับ BIT และนั่นคือสิ่งที่เราต้องการ

นี่คือตัวอย่างโค้ด :

class Bitmask
  def initialize
    @value = 0
  end

  def set(bit)
    @value |= bit
  end

  def clear(bit)
    @value &= ~bit
  end

  def check(bit)
    (@value & bit) == bit
  end

  def to_binary
    @value.to_s(2)
  end
end

bit = Bitmask.new

วิธีใช้ BitMasking

ตอนนี้คุณสามารถใช้ set , clear &check วิธีการทำงานกับโครงสร้างข้อมูลนี้ คุณยังอาจต้องการกำหนดค่าคงที่เพื่ออธิบายความหมายของแต่ละค่า

ตัวอย่าง :

class Bitmask
  ENGINES_ENABLED = 1
  CAPTAIN_ABOARD  = 2
  SHIELDS_UP      = 4

  # ... rest of code here
end

bit = Bitmask.new

bit.set(Bitmask::ENGINES_ENABLED)
bit.check(Bitmask::ENGINES_ENABLED)

ค่าที่ถูกต้องสำหรับ set รวม 1 และกำลัง 2 (2,4,8,16,32…) เพื่อหลีกเลี่ยงการเขียนทับบิตอื่นๆ

Math With Ruby:Modulo Operator, Binary &More

ถ้าเรามี 64 + 32 + 1 ค่าที่เก็บไว้จะเป็นดังนี้:

1100001

วิธีคณิตศาสตร์ทับทิม

Ruby มีวิธีการทางคณิตศาสตร์ในตัวที่อาจเป็นประโยชน์

เราได้ครอบคลุม divmod . แล้ว , even? &odd? .

วิธีอื่นๆ ได้แก่ :

  • ** / pow (การยกกำลัง)
  • gcd (ตัวหารร่วมมาก)
  • abs (ค่าสัมบูรณ์ ลบเครื่องหมายลบ)
  • round (ปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด)
  • floor &ceil (ปัดลง / ปัดขึ้น)
  • Math.sqrt(n) (รากที่สองของ n)
  • Math.log2(n) (log2 ของ n)
  • digits (แปลงจำนวนเต็มเป็นอาร์เรย์แบบย้อนกลับของตัวเลข)

ตัวอย่าง :

5 ** 2
# 25

-10.abs
# 10

300.digits
# [0, 0, 3]

คณิตศาสตร์ในวิดีโอทับทิม

สรุป

คุณได้เรียนรู้เทคนิคทางคณิตศาสตร์ที่น่าสนใจบางอย่างแล้ว เช่น การใช้มอดูโล % เพื่อค้นหาส่วนที่เหลือของการหาร คุณสามารถใช้เศษที่เหลือเพื่อตรวจสอบว่าตัวเลขอื่นหารลงตัวหรือไม่

คุณยังได้เรียนรู้เกี่ยวกับระบบตัวเลข บิตมาสก์ และตัวดำเนินการระดับบิต

อย่าลืมแชร์โพสต์นี้…

และสมัครรับจดหมายข่าว RubyGuides หากคุณยังไม่ได้สมัคร!