In [ ]:
#
# 나는 julia 를 사랑하는가.
#
In [ ]:
#
# arithmetic operators
#
# 산술 연산자
#
# 산술 연산자를 알아보자.
#
In [1]:
# 이런건 익숙하다.
1 + 2 + 3
Out[1]:
In [2]:
1 - 2
Out[2]:
In [3]:
3*2/12
Out[3]:
In [4]:
#=
~ : bitwise not
& : bitwise and
| : bitwise or
$ : bitwise xor
>>> : logical shift right
>> : arithmetic shift right
<< : logical/arithmetic shift left
=#
~123
Out[4]:
In [5]:
123 & 234
Out[5]:
In [6]:
123 | 234
Out[6]:
In [7]:
123 $ 234
Out[7]:
In [8]:
~UInt32(123)
Out[8]:
In [9]:
~UInt8(123)
Out[9]:
In [10]:
#
# updating operators
# 갱신 연산자
#
# x += 3 은 x = x + 3 과 같다.
#
x = 1
Out[10]:
In [11]:
x += 3
Out[11]:
In [12]:
x
Out[12]:
In [13]:
#=
+= -= *= /= \= ÷= %=
^= &= |= $= >>>= >>= <<=
=#
In [14]:
x = 0x01; typeof(x)
Out[14]:
In [15]:
# 계산결과, type 이 바뀔수 있다.
x *= 2 # x = x * 2 와 같다.
Out[15]:
In [16]:
# UInt8 이 아니다!
isa(x, Int)
Out[16]:
In [17]:
# UInt8 이 Int64 로 바뀌었다!
typeof(x)
Out[17]:
In [18]:
# 비교
#=
== : 같은가
!= ≠ : 다른가
< : 작은가
<= ≤ : 작거나 같은가
> : 큰가
>= ≥ : 크거나 같은가
=#
1 == 1
Out[18]:
In [19]:
1 == 2
Out[19]:
In [20]:
1 != 2
Out[20]:
In [21]:
1 == 1.0
Out[21]:
In [22]:
1 < 2
Out[22]:
In [23]:
1.0 > 3
Out[23]:
In [24]:
1 >= 1.0
Out[24]:
In [25]:
-1 <= 1
Out[25]:
In [26]:
-1 <= -1
Out[26]:
In [27]:
-1 <= -2
Out[27]:
In [28]:
3 < -0.5
Out[28]:
In [29]:
# NaN 은 자기자신과도 같지 않다!
NaN == NaN
Out[29]:
In [30]:
# NaN 은 자기자신과도 같지 않다!
NaN != NaN
Out[30]:
In [31]:
# NaN 은 자기자신보다 작지 않다.
NaN < NaN
Out[31]:
In [32]:
# NaN 은 자기자신보다 크지 않다.
NaN > NaN
Out[32]:
In [33]:
# 이런 NaN 의 성질때문에 다음 두 배열은 서로 다르다.
# 놀랍다!
[1 NaN] == [1 NaN]
Out[33]:
In [34]:
# isequal() 함수는 NaN 을 서로 같은것으로 간주해준다.
isequal(NaN, NaN)
Out[34]:
In [35]:
# 두 배열을 같은것으로 판정해준다.
isequal( [1 NaN], [1 NaN])
Out[35]:
In [36]:
isequal( NaN, NaN32)
Out[36]:
In [37]:
# 이것은 서로 같다고 판정한다.
-0.0 == 0.0
Out[37]:
In [39]:
# 이것은 서로 다르다고 파정한다.
#
# 부호있는 영(0) 을 구분해주는 역할을 한다.
isequal( -0.0, 0.0)
Out[39]:
In [40]:
# Chaining comparisons
# 연쇄 비교
1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5
Out[40]:
In [41]:
# v(2) 는 한번만 실행된다.
# 실행순서는 정의되지 않았다.
# 따라서, 부작용(side effect) 이 있는 함수를
# 연쇄 비교에서 사용하지 말것.
v(x) = (println(x); x)
v(1) < v(2) <= v(3)
Out[41]:
In [42]:
# Short-Circuit Evaluation
# 기능이 있다.
# 이미 false 가 판정되었으므로,
# v(3) 는 실행하지 않아도, 전체결과는 false 가 확실하다.
# 따라서, 만약 v(3) 함수에 반드시 실행해야하는 기능이 있다면
# 연쇄 비교문을 쓰지 말것.
# 연쇄비교는 모양은 이쁘지만
# 실행순서가 보장되지 않고
# short-circuit evaluation 때문에
# 아예 실행되지 않을 수도 있다.
v(1) > v(2) <= v(3)
Out[42]:
In [43]:
# Numerical Conversions
#
# 숫자형 변환
Int8(127)
Out[43]:
In [44]:
# 이것은 형변환이 안된다.
Int8(128)
In [45]:
Int8(127.0)
Out[45]:
In [46]:
# 이것은 형변환이 안된다.
Int8(3.14)
In [47]:
# 이것은 형변환이 안된다.
Int8(128.0)
In [48]:
127 % Int8
Out[48]:
In [50]:
typeof(ans)
Out[50]:
In [51]:
128 % Int8
Out[51]:
In [52]:
typeof(ans)
Out[52]:
In [53]:
round(Int8, 127.4)
Out[53]:
In [54]:
# 이것은 형변환이 안된다.
round(Int8, 127.6)
In [ ]:
#=
round
floor
ceil
trunc
...
Julia 는
삼각함수, 로그함수, 지수함수, 특수함수 등의 기본함수를 제공한다.
=#