diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp
index 05ab36f3..6d72cbf0 100644
--- a/include/nlohmann/detail/input/binary_reader.hpp
+++ b/include/nlohmann/detail/input/binary_reader.hpp
@@ -392,17 +392,20 @@ class binary_reader
 
             case 0xF9: // Half-Precision Float (two-byte IEEE 754)
             {
-                const int byte1 = get();
+                const int byte1_raw = get();
                 if (JSON_UNLIKELY(not unexpect_eof()))
                 {
                     return false;
                 }
-                const int byte2 = get();
+                const int byte2_raw = get();
                 if (JSON_UNLIKELY(not unexpect_eof()))
                 {
                     return false;
                 }
 
+                const unsigned char byte1 = static_cast<unsigned char>(byte1_raw);
+                const unsigned char byte2 = static_cast<unsigned char>(byte2_raw);
+
                 // code from RFC 7049, Appendix D, Figure 3:
                 // As half-precision floating-point numbers were only added
                 // to IEEE 754 in 2008, today's programming platforms often
diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index d62638bd..a1a3d697 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -6354,17 +6354,20 @@ class binary_reader
 
             case 0xF9: // Half-Precision Float (two-byte IEEE 754)
             {
-                const int byte1 = get();
+                const int byte1_raw = get();
                 if (JSON_UNLIKELY(not unexpect_eof()))
                 {
                     return false;
                 }
-                const int byte2 = get();
+                const int byte2_raw = get();
                 if (JSON_UNLIKELY(not unexpect_eof()))
                 {
                     return false;
                 }
 
+                const unsigned char byte1 = static_cast<unsigned char>(byte1_raw);
+                const unsigned char byte2 = static_cast<unsigned char>(byte2_raw);
+
                 // code from RFC 7049, Appendix D, Figure 3:
                 // As half-precision floating-point numbers were only added
                 // to IEEE 754 in 2008, today's programming platforms often