Computer >> Máy Tính >  >> Lập trình >> Ruby

Toán học với Ruby:Toán tử Modulo, Binary &hơn thế nữa

Bạn có cần biết toán để trở thành một lập trình viên giỏi không?

Còn tùy!

Nếu bạn chỉ viết ứng dụng CRUD cả ngày thì có thể bạn không cần biết nhiều toán học, nếu có.

Nhưng nếu bạn muốn làm những điều thú vị hơn, như giải quyết các thách thức về mã hóa và chuẩn bị cho các cuộc phỏng vấn viết mã thì việc học một vài khái niệm cơ bản sẽ hữu ích.

Hôm nay bạn sẽ tìm hiểu về :

  • Toán tử mô-đun (% )
  • Hệ thống số
  • Mặt nạ bit

Bạn sẽ học cách áp dụng những khái niệm này trong Ruby, vì vậy đây sẽ là một hướng dẫn thực tế.

Hãy làm điều này!

Nhà điều hành Ruby Modulo

Toán tử Ruby modulo trông giống như sau:

%

Có, giống như biểu tượng phần trăm.

Nó làm gì?

Toán tử modulo cung cấp cho bạn phần còn lại của phép chia . Điều này có thể được sử dụng cho những việc như kiểm tra xem một số là số chẵn hay lẻ.

Có.

Trong Ruby, chúng ta có even? / odd? phương pháp.

Ví dụ :

8.even?
# true

5.even?
# false

Nhưng nếu bạn muốn kiểm tra xem một số có chia hết cho 3 hay không thì bạn phải sử dụng toán tử modulo.

Ví dụ :

9 % 3 == 0
# true

Hãy khám phá thêm các cách sử dụng!

Sử dụng thực tế cho nhà điều hành Modulo

Bạn có thể sử dụng mô-đun để kiểm tra xem một số có chia hết cho một số khác không .

Một số chia hết nếu số còn lại là 0.

Ví dụ :

Thử thách mã hóa “FizzBuzz” cổ điển muốn bạn tìm hiểu xem một số chia hết cho 3 hay 5.

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

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

Bạn có thể sử dụng modulo để thực hiện công việc mọi thứ vào lần thứ N.

Như thế này :

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

Hoặc bạn có thể sử dụng step phương pháp:

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

Sử dụng Phương pháp Divmod

Một cách sử dụng khác cho toán tử mô-đun là chuyển đổi phút thành giờ + phút còn lại.

Ví dụ :

Chúng ta có 90 phút, tương đương với 1 giờ 30 phút.

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

Lưu ý divmod phương pháp:

Nó thực hiện phân chia &mô-đun (phần còn lại của bộ phận) cùng một lúc.

Rất hữu ích!

Hiểu hệ thống số

Hệ thống số là một cách để biểu diễn các con số.

Trong việc sử dụng số hàng ngày, bạn sử dụng hệ thống thập phân .

0123456789

Hệ thống số bao gồm một tập hợp các số và đôi khi cả các ký tự.

Ví dụ :

Hệ thống thập lục phân sử dụng tổng cộng 16 ký hiệu.

0123456789abcdef

Đây là bảng hệ thống số phổ biến :

Tên Số lượng ký hiệu Biểu tượng
Hệ thập lục phân 16 0123456789abcdef
Số thập phân 10 0123456789
Bát phân 8 01234567
Nhị phân 2 01

Bạn có thể chuyển đổi giữa các hệ thống số trong Ruby bằng to_s phương pháp.

Dưới đây là cách chuyển đổi từ số thập phân (9 ) thành nhị phân (1001 ):

9.to_s(2)
# "1001"

Bạn có thể sử dụng to_i trên một chuỗi để chuyển đổi lại thành một số nguyên.

Vì vậy, nếu bạn muốn chuyển từ hệ thập lục phân (ff ) thành số thập phân (255 ) bạn có thể làm điều này:

"ff".to_i(16)
# 255

Trong đó 16 là "số ký hiệu" hoặc cơ sở cho số.

Bitmasking là gì?

Bạn có thể không thức dậy mỗi ngày để suy nghĩ…

"Chào! Tôi cần đóng gói nhiều giá trị boolean vào càng ít không gian càng tốt. ”

Nhưng nếu một ngày nào đó bạn cần làm điều đó…

Một kỹ thuật tuyệt vời có thể giúp bạn là "mặt nạ bit".

Với bitmasking, bạn có thể đóng gói nhiều giá trị boolean thành một giá trị số nguyên duy nhất.

Làm thế nào mà có thể?

Bằng cách sử dụng các bit riêng lẻ mà con số được tạo thành.

Vì giá trị boolean có thể được biểu diễn bằng một bit duy nhất và giá trị số nguyên có 64 bit, chúng tôi có thể đóng gói tối đa 64 giá trị boolean thành một số duy nhất.

Chúng tôi sẽ sử dụng toán tử bitwise.

Đây là bảng :

Tên Biểu tượng Sử dụng
XOR (Độc quyền HOẶC) ^ Bit Chuyển đổi
& Kiểm tra Bit
KHÔNG ~ Xóa Bit
HOẶC | Đặt Bit

Các toán tử bitwise hoạt động ở cấp BIT và đó chính xác là những gì chúng tôi muốn.

Đây là một ví dụ về mã :

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

Cách sử dụng BitMasking

Bây giờ bạn có thể sử dụng set , clear &check các phương pháp làm việc với cấu trúc dữ liệu này. Bạn cũng có thể muốn xác định các hằng số để mô tả ý nghĩa của mỗi giá trị.

Ví dụ :

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)

Giá trị hợp lệ cho set bao gồm 1 &lũy thừa của 2 (2,4,8,16,32…), điều này tránh ghi đè lên các bit khác.

Toán học với Ruby:Toán tử Modulo, Binary &hơn thế nữa

Nếu chúng ta có 64 + 32 + 1, giá trị được lưu trữ sẽ giống như sau:

1100001

Phương pháp toán học Ruby

Ruby bao gồm một số phương pháp toán học tích hợp có thể hữu ích.

Chúng tôi đã đề cập đến divmod , even? &odd? .

Các phương pháp khác bao gồm :

  • ** / pow (lũy thừa)
  • gcd (ước số chung lớn nhất)
  • abs (giá trị tuyệt đối, loại bỏ dấu âm)
  • round (làm tròn đến số nguyên gần nhất)
  • floor &ceil (làm tròn xuống / làm tròn lên)
  • Math.sqrt(n) (căn bậc hai của n)
  • Math.log2(n) (log2 của n)
  • digits (chuyển đổi số nguyên thành một mảng ngược lại các chữ số)

Ví dụ :

5 ** 2
# 25

-10.abs
# 10

300.digits
# [0, 0, 3]

Math trong Ruby Video

Tóm tắt

Bạn đã học được một số thủ thuật toán học thú vị, như sử dụng modulo % để tìm ra phần còn lại của một phép chia. Bạn có thể sử dụng phần còn lại để kiểm tra xem một số có chia hết cho một số khác không.

Bạn cũng đã học về hệ thống số, mặt nạ bit và toán tử bitwise.

Đừng quên chia sẻ bài đăng này…

Và đăng ký nhận bản tin RubyGuides nếu bạn chưa đăng ký!