diff --git a/src/FixedPointNumbers.jl b/src/FixedPointNumbers.jl index 00cbdfef..0c75d4bf 100644 --- a/src/FixedPointNumbers.jl +++ b/src/FixedPointNumbers.jl @@ -4,7 +4,7 @@ module FixedPointNumbers using Compat -import Base: ==, <, <=, -, +, *, /, +import Base: ==, <, <=, -, +, *, /, ~, convert, promote_rule, show, showcompact, isinteger, abs, decompose, isnan, isinf, isfinite, zero, one, typemin, typemax, realmin, realmax, eps, sizeof, reinterpret, diff --git a/src/ufixed.jl b/src/ufixed.jl index e4f4de2f..26a2cc77 100644 --- a/src/ufixed.jl +++ b/src/ufixed.jl @@ -82,6 +82,9 @@ sizeof{T<:Ufixed}(::Type{T}) = sizeof(rawtype(T)) abs(x::Ufixed) = x # Arithmetic +(-){T<:Ufixed}(x::T) = T(-reinterpret(x), 0) +(~){T<:Ufixed}(x::T) = T(~reinterpret(x), 0) + +{T,f}(x::UfixedBase{T,f}, y::UfixedBase{T,f}) = convert(Float32, x)+convert(Float32, y) # UfixedBase{T,f}(convert(T, reinterpret(x)+reinterpret(y)),0) -{T,f}(x::UfixedBase{T,f}, y::UfixedBase{T,f}) = convert(Float32, x)-convert(Float32, y) # UfixedBase{T,f}(convert(T, reinterpret(x)-reinterpret(y)),0) *{T,f}(x::UfixedBase{T,f}, y::UfixedBase{T,f}) = convert(Float32, x)*convert(Float32, y) diff --git a/test/ufixed.jl b/test/ufixed.jl index 4cdc9db9..9293175f 100644 --- a/test/ufixed.jl +++ b/test/ufixed.jl @@ -59,6 +59,10 @@ for T in FixedPointNumbers.UF end @test convert(Rational, convert(Ufixed8, 0.5)) == 0x80//0xff +x = Ufixed8(0b01010001, 0) +@test ~x == Ufixed8(0b10101110, 0) +@test -x == 0xafuf8 + for T in FixedPointNumbers.UF x = T(0x10,0) y = T(0x25,0)