diff --git a/pulse_lib/acquisition/measurement_converter.py b/pulse_lib/acquisition/measurement_converter.py
index 3d2b34e82ddb07fbc16832a220b1d400faac1c1b..51c176bf0334e70c9d1731ecffcd207c95ef7bbe 100644
--- a/pulse_lib/acquisition/measurement_converter.py
+++ b/pulse_lib/acquisition/measurement_converter.py
@@ -316,7 +316,7 @@ class MeasurementConverter:
                     continue
                 result = self._raw[i] > m.threshold
                 if m.zero_on_high:
-                    result = ~result
+                    result = result ^ 1
                 result = result.astype(int)
             elif isinstance(m, measurement_expression):
                 result = m.expression.evaluate(last_result)
diff --git a/pulse_lib/segments/utility/measurement_converter.py b/pulse_lib/segments/utility/measurement_converter.py
index 164717e3ed2b3626d5ceeadfd0527ba4f37b5fe0..7d37f9740f0c10a659034a8a66d217446d3e61e3 100644
--- a/pulse_lib/segments/utility/measurement_converter.py
+++ b/pulse_lib/segments/utility/measurement_converter.py
@@ -201,7 +201,8 @@ class measurement_converter:
                 channel_name = m.acquisition_channel
                 result = self._channel_raw[channel_name][m.index] > m.threshold
                 if m.zero_on_high:
-                    result = not result
+                    # flip bit 0
+                    result = result ^ 1
                 result = result.astype(int)
             elif isinstance(m, measurement_expression):
                 result = m.expression.evaluate(last_result)