Add casts to removed undefined behaviors around shifts.

Fixes #4246
Fixes #4247
diff --git a/objectivec/GPBUtilities_PackagePrivate.h b/objectivec/GPBUtilities_PackagePrivate.h
index c8b21ed..ed424ce 100644
--- a/objectivec/GPBUtilities_PackagePrivate.h
+++ b/objectivec/GPBUtilities_PackagePrivate.h
@@ -124,7 +124,7 @@
 // thus always taking 10 bytes on the wire.)
 GPB_INLINE uint32_t GPBEncodeZigZag32(int32_t n) {
   // Note:  the right-shift must be arithmetic
-  return (uint32_t)((n << 1) ^ (n >> 31));
+  return ((uint32_t)n << 1) ^ (uint32_t)(n >> 31);
 }
 
 // Encode a ZigZag-encoded 64-bit value.  ZigZag encodes signed integers
@@ -133,7 +133,7 @@
 // thus always taking 10 bytes on the wire.)
 GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) {
   // Note:  the right-shift must be arithmetic
-  return (uint64_t)((n << 1) ^ (n >> 63));
+  return ((uint64_t)n << 1) ^ (uint64_t)(n >> 63);
 }
 
 #pragma clang diagnostic push