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 |
VÀ | & | 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.
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ý!