diff --git a/src/libslic3r/TriangleSelector.cpp b/src/libslic3r/TriangleSelector.cpp
index ad69f6c7f..911dede4c 100644
--- a/src/libslic3r/TriangleSelector.cpp
+++ b/src/libslic3r/TriangleSelector.cpp
@@ -599,8 +599,8 @@ std::map<int, std::vector<bool>> TriangleSelector::serialize() const
                 if (3 <= int(tr.get_state()) && int(tr.get_state()) <= 15) {
                     data.insert(data.end(), {true, true});
                     for (size_t bit_idx = 0; bit_idx < 4; ++bit_idx) {
-                        size_t bit_mask = 0b0001 << bit_idx;
-                        data.push_back(int(tr.get_state()) - 3 & bit_mask);
+                        size_t bit_mask = uint64_t(0b0001) << bit_idx;
+                        data.push_back((int(tr.get_state()) - 3) & bit_mask);
                     }
                 } else {
                     data.push_back(int(tr.get_state()) & 0b01);