diff --git a/test/Common/ComplexInt4.h b/test/Common/ComplexInt4.h
index e448428f3fe964e666dea4bcc6221ecb9ae1aeba..2cb9c50fb3b56a8fcb4bcf83947d166672d77ad6 100644
--- a/test/Common/ComplexInt4.h
+++ b/test/Common/ComplexInt4.h
@@ -10,8 +10,8 @@ class complex_int4_t
     complex_int4_t() {}
     complex_int4_t(int real, int imag) { value = (imag << 4) | (real & 0xF); }
     complex_int4_t operator = (const complex_int4_t &other) { value = other.value; return *this; }
-    int real() const { return value << (std::numeric_limits<int>::digits - 4) >> (std::numeric_limits<int>::digits - 4); }
-    int imag() const { return value << (std::numeric_limits<int>::digits - 8) >> (std::numeric_limits<int>::digits - 4); }
+    int real() const { return (signed) value << (std::numeric_limits<unsigned>::digits - 4) >> (std::numeric_limits<unsigned>::digits - 4); }
+    int imag() const { return (signed) value << (std::numeric_limits<unsigned>::digits - 8) >> (std::numeric_limits<unsigned>::digits - 4); }
     operator std::complex<int> () const { return std::complex<int>(real(), imag()); }
 
   private: