diff --git a/include/hb_detail.h b/include/hb_detail.h
index d222d4c6fb87594d5ec1709153d9f04f77e8838c..1164702d998dde98e15ed05d7ad54dfa56610ba9 100644
--- a/include/hb_detail.h
+++ b/include/hb_detail.h
@@ -553,7 +553,7 @@ struct ZoneResponse {
 	bool parse(ZoneAndProperties& zps, bool& hasMore) {
 		if (len < min_len || data[3] != len) { return false; } // check valid again
 		Char sum_ = data[len - 1]; sum(data, len); if (sum_ != data[len - 1]) { return false; } // check sum again
-		Char count = (len - min_len) >> 2; // zone/prop pairs
+		Char count = Char(len - min_len) >> 1; // zone/prop pairs
 		if (count == 0) { zps.clear(); hasMore = false; return true; }
 		for (Char i = 0; i < count; i++) {
 			ZoneAndProperty zp;
@@ -755,7 +755,7 @@ struct QuerySensorLostSettingsResponse {
 		if (len < min_len || data[3] != len) { return false; } // check valid again
 		Char sum_ = data[len - 1]; sum(data, len); if (sum_ != data[len - 1]) { return false; } // check sum again
 		Char flag = data[6]; if (flag != P1FlagZoneAs1Char && flag != P1FlagZoneAs2Chars) { return false; } // check param
-		Char count = (len - min_len); if (flag == P1FlagZoneAs2Chars) { count /= 2; }
+		Char count = Char(len - min_len); if (flag == P1FlagZoneAs2Chars) { count >>= 1; }
 		if (count == 0) { zones.clear(); hasMore = false; return true; }
 		for (Char i = 0; i < count; i++) {
 			size_t zone = data[7 + i];