diff --git a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/File.h b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/File.h
index 5d4f13f..b65e5cb 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/File.h
+++ b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/File.h
@@ -66,7 +66,7 @@
               CAPU_EOF    if end of stream 
               CAPU_ERROR  if invalid state or file not open
      */
-    inline status_t read(char * buffer, int32_t length, int32_t* numBytes);
+    inline status_t read(char * buffer, uint32_t length, int32_t* numBytes);
 
     /**
      * Writes the given byte buffer to the stream.
@@ -75,7 +75,7 @@
      * return CAPU_OK buffer could be written to the stream
      *        CAPU_ERROR otherwise
      */
-    inline status_t write(char * buffer, int32_t length);
+    inline status_t write(char * buffer, uint32_t length);
 
     /**
      * Writes any unwritten data to the file.
diff --git a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/File.inc b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/File.inc
index 5b31370..be5e0d6 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/File.inc
+++ b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Linux/File.inc
@@ -49,7 +49,7 @@
     return (feof(mHandle) != 0);
   }
 
-  inline status_t File::read(char * buffer, int32_t length, int32_t* numBytes) {
+  inline status_t File::read(char * buffer, uint32_t length, int32_t* numBytes) {
     if(buffer == NULL) {
       return CAPU_EINVAL;
     }
@@ -74,7 +74,7 @@
     return CAPU_ERROR;
   }
 
-  inline status_t File::write(char * buffer, int32_t length) {
+  inline status_t File::write(char * buffer, uint32_t length) {
     if(buffer == NULL) {
       return CAPU_EINVAL;
     }
diff --git a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows/File.inc b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows/File.inc
index b316fb2..7488d43 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows/File.inc
+++ b/binding-cpp/runtime/lib/capu/modules/capu/include/capu/os/arch/Windows/File.inc
@@ -50,7 +50,7 @@
     return (feof(mHandle) != 0);
   }
 
-  inline status_t File::read(char * buffer, int32_t length, int32_t* numBytes) {
+  inline status_t File::read(char * buffer, uint32_t length, int32_t* numBytes) {
     if(buffer == NULL) {
       return CAPU_EINVAL;
     }
@@ -75,7 +75,7 @@
     return CAPU_ERROR;
   }
 
-  inline status_t File::write(char * buffer, int32_t length) {
+  inline status_t File::write(char * buffer, uint32_t length) {
     if(buffer == NULL) {
       return CAPU_EINVAL;
     }
diff --git a/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp b/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp
index fc40b2f..9cbbd49 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp
+++ b/binding-cpp/runtime/lib/capu/modules/capu/test/os/AtomicOperationTest.cpp
@@ -25,27 +25,27 @@
 TEST(AtomicOperation,Add) {
   capu::uint32_t val = 100;
   capu::uint32_t ret = capu::AtomicOperation::AtomicAdd32(val, 3);
-  EXPECT_EQ((capu::uint32_t) 103,val);
-  EXPECT_EQ(ret, 100);
+  EXPECT_EQ(103u,val);
+  EXPECT_EQ(100u, ret);
 }
 
 TEST(AtomicOperation,Sub) {
   capu::uint32_t val = 13;
   capu::uint32_t ret = capu::AtomicOperation::AtomicSub32(val, 5);
-  EXPECT_EQ((capu::uint32_t) 8,val);
-  EXPECT_EQ(ret, 13);
+  EXPECT_EQ(8u,val);
+  EXPECT_EQ(13u, ret);
 }
 
 TEST(AtomicOperation,Inc) {
   capu::uint32_t val = 1;
   capu::uint32_t ret = capu::AtomicOperation::AtomicInc32(val);
-  EXPECT_EQ((capu::uint32_t) 2,val);
-  EXPECT_EQ(ret, 1);
+  EXPECT_EQ(2u,val);
+  EXPECT_EQ(1u, ret);
 }
 
 TEST(AtomicOperation,Dec) {
   capu::uint32_t val = 3;
   capu::uint32_t ret = capu::AtomicOperation::AtomicDec32(val);
-  EXPECT_EQ((capu::uint32_t) 2,val);
-  EXPECT_EQ(ret, 3);
-}
\ No newline at end of file
+  EXPECT_EQ(2u,val);
+  EXPECT_EQ(3u, ret);
+}
diff --git a/binding-cpp/runtime/lib/capu/modules/capu/test/os/FileTest.cpp b/binding-cpp/runtime/lib/capu/modules/capu/test/os/FileTest.cpp
index 1ee6e78..d8a6ecf 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/test/os/FileTest.cpp
+++ b/binding-cpp/runtime/lib/capu/modules/capu/test/os/FileTest.cpp
@@ -102,7 +102,7 @@
   memset(buf2, 0, sizeof(buf2));
   status = f3->read(buf2, strlen(buf1), &read);
   EXPECT_TRUE(status == capu::CAPU_OK);
-  EXPECT_TRUE(read == strlen(buf1));
+  EXPECT_TRUE(read == (capu::uint32_t)strlen(buf1));
   delete f3;
 
   // read data
@@ -113,7 +113,7 @@
   memset(buf2, 0, sizeof(buf2));
   status = f4->read(buf2, strlen(buf1), NULL);
   EXPECT_TRUE(status == capu::CAPU_OK);
-  EXPECT_TRUE(read == strlen(buf1));
+  EXPECT_TRUE(read == (capu::uint32_t)strlen(buf1));
   delete f4;
 
   // read data Eof
@@ -125,7 +125,7 @@
   memset(buf2, 0, sizeof(buf2));
   status = f5->read(buf2, sizeof(buf2), &read);
   EXPECT_TRUE(status == capu::CAPU_EOF);
-  EXPECT_TRUE(read == strlen(buf1));
+  EXPECT_TRUE(read == (capu::uint32_t)strlen(buf1));
   EXPECT_TRUE(strcmp(buf1, buf2) == 0);
   delete f5;
 }
diff --git a/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc b/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc
index 741d5d0..6493801 100644
--- a/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc
+++ b/binding-cpp/runtime/lib/capu/modules/capu/test/os/arch/X86_32/AtomicOperation.inc
@@ -21,13 +21,13 @@
 TEST(AtomicOperation, Add_Overflow_X86_32) {
   capu::uint32_t val = 4294967295u;
   capu::uint32_t ret = capu::AtomicOperation::AtomicAdd32(val, 3);
-  EXPECT_EQ((capu::uint32_t) 2, val);
-  EXPECT_EQ(ret, 4294967295u);
+  EXPECT_EQ(2u, val);
+  EXPECT_EQ(4294967295u, ret);
 }
 
 TEST(AtomicOperation, Sub_Overflow_X86_32) {
   capu::uint32_t val = 0;
   capu::uint32_t ret = capu::AtomicOperation::AtomicSub32(val, 5);
-  EXPECT_EQ((capu::uint32_t) 4294967291u, val);
-  EXPECT_EQ(ret, 0u);
+  EXPECT_EQ(4294967291u, val);
+  EXPECT_EQ(0u, ret);
 }
\ No newline at end of file
