diff --git a/src/decode.c b/src/decode.c
index 392a1a0ba6c32b55bed14318a047780dc3f0cb61..c1b5ba1716cc06032e91ad1625d2305ee4fb63a2 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -100,7 +100,7 @@
                     uint32_t mask = (data & med)?xmax:0;                 \
                                                                          \
                     /*in this case: xmax - data == xmax ^ data */        \
-                    if (half_d <= (mask ^ data)) {                       \
+                    if (half_d <= (mask ^ (uint32_t)data)) {             \
                         data += (d >> 1)^(~((d & 1) - 1));               \
                     } else {                                             \
                         data = mask ^ d;                                 \
@@ -117,13 +117,13 @@
                     half_d = ((uint32_t)d >> 1) + (d & 1);               \
                                                                          \
                     if (data < 0) {                                      \
-                        if (half_d <= xmax + data + 1) {                 \
+                        if (half_d <= xmax + (uint32_t)data + 1) {       \
                             data += ((uint32_t)d >> 1)^(~((d & 1) - 1)); \
                         } else {                                         \
                             data = d - xmax - 1;                         \
                         }                                                \
                     } else {                                             \
-                        if (half_d <= xmax - data) {                     \
+                        if (half_d <= xmax - (uint32_t)data) {           \
                             data += ((uint32_t)d >> 1)^(~((d & 1) - 1)); \
                         } else {                                         \
                             data = xmax - d;                             \