Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby를 사용한 수학:모듈로 연산자, 이진 등

좋은 프로그래머가 되려면 수학을 알아야 하나요?

따라 다릅니다!

하루 종일 CRUD 앱을 작성할 예정이라면 수학을 많이 알 필요가 없을 것입니다.

그러나 코딩 문제를 해결하고 코딩 인터뷰를 준비하는 것과 같이 더 흥미로운 일을 하고 싶다면 몇 가지 기본 개념을 배우는 것이 도움이 됩니다.

오늘 배울 내용 :

  • 모듈로 연산자(% )
  • 숫자 체계
  • 비트마스킹

이러한 개념을 Ruby에서 적용하는 방법을 배우게 되므로 실용적인 가이드가 될 것입니다.

해보자!

루비 모듈로 연산자

Ruby 모듈로 연산자는 다음과 같습니다.

%

예, 백분율 기호와 같습니다.

어떤 역할을 하나요?

모듈로 연산자는 나머지 부분을 제공합니다. . 숫자가 짝수인지 홀수인지 확인하는 등의 작업에 사용할 수 있습니다.

네.

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를 사용할 수 있습니다. N번째 작업을 수행하는 연산자입니다.

좋아요 :

(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 방법 사용

모듈로 연산자의 또 다른 용도는 분을 시간 + 남은 분으로 변환하는 것입니다.

:

1시간 30분과 같은 90분이 있습니다.

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

divmod 주목 방법:

나눗셈과 모듈로(나머지 나눗셈)를 동시에 합니다.

매우 유용합니다!

숫자 체계의 이해

숫자 체계는 숫자를 나타내는 방법입니다.

매일 숫자를 사용할 때 십진법을 사용합니다. .

0123456789

숫자 체계는 숫자와 때로는 문자 집합으로 구성됩니다.

예를 들어 :

16진법은 총 16개의 기호를 사용합니다.

0123456789abcdef

다음은 일반적인 숫자 체계의 표입니다. :

이름 기호 개수 기호
16진수 16 0123456789abcdef
소수점 10 0123456789
8진수 8 01234567
바이너리 2 01

to_s를 사용하여 Ruby에서 숫자 체계 간에 변환할 수 있습니다. 방법.

십진수에서 변환하는 방법은 다음과 같습니다. (9 )를 바이너리로 (1001 ):

9.to_s(2)
# "1001"

to_i를 사용할 수 있습니다. 문자열에 대한 메서드를 사용하여 다시 정수로 변환합니다.

따라서 16진수에서 이동하려면 (ff )에서 소수점으로 (255 ) 다음과 같이 할 수 있습니다.

"ff".to_i(16)
# 255

여기서 16은 숫자의 "기호 개수" 또는 밑수입니다.

비트마스킹이란 무엇입니까?

당신은 아마도 매일 생각하지 않을 것입니다 ...

"여기요! 많은 부울 값을 압축해야 합니다. 가능한 한 작은 공간으로."

하지만 언젠가 그렇게 해야 한다면…

도움이 될 수 있는 훌륭한 기술은 "비트마스킹"입니다.

비트마스킹을 사용하면 많은 부울 값을 단일 정수 값으로 묶을 수 있습니다.

그게 어떻게 가능한가요?

개별 비트 사용 그 번호로 구성되어 있습니다.

부울 값은 단일 비트로 나타낼 수 있고 정수 값은 64비트이므로 최대 64개의 부울 값을 단일 숫자로 압축할 수 있습니다.

비트 연산자를 사용할 것입니다.

다음은 표입니다 :

이름 기호 사용
XOR(배타적 OR) ^ 토글 비트
그리고 & 비트 확인
아니요 ~ 비트 지우기
또는 | 비트 설정

비트 연산자는 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

비트마스킹 사용 방법

이제 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…)을 포함하면 다른 비트를 덮어쓰는 것을 방지할 수 있습니다.

Ruby를 사용한 수학:모듈로 연산자, 이진 등

64 + 32 + 1이 있는 경우 저장된 값은 다음과 같습니다.

1100001

루비 수학 방법

Ruby에는 도움이 될 수 있는 몇 가지 내장 수학 방법이 포함되어 있습니다.

우리는 이미 divmod를 다루었습니다. , even? &odd? .

다른 방법은 다음과 같습니다. :

  • ** / pow (지수)
  • gcd (최대공약수)
  • abs (절대값, 음수 부호 제거)
  • round (가장 가까운 정수로 반올림)
  • floor &ceil (내림/올림)
  • Math.sqrt(n) (n의 제곱근)
  • Math.log2(n) (n의 log2)
  • digits (정수를 숫자의 역 배열로 변환)

:

5 ** 2
# 25

-10.abs
# 10

300.digits
# [0, 0, 3]

Ruby 비디오의 수학

요약

모듈로 % 사용과 같은 몇 가지 흥미로운 수학 트릭을 배웠습니다. 나눗셈의 나머지를 찾기 위해. 나머지를 사용하여 숫자가 다른 숫자로 나누어 떨어지는지 확인할 수 있습니다.

숫자 체계, 비트마스킹 및 비트 연산자에 대해서도 배웠습니다.

이 게시물을 공유하는 것을 잊지 마세요...

아직 구독하지 않으셨다면 RubyGuides 뉴스레터를 구독하세요!