Highest value of int type in C/C++. Why can't I calculate it correctly in this example? -


in example program print out powers of 2 highest possible integer value run confusing result.

the integer variables signed, highest bit used sign. on machine size of integer 4 bytes, i.e. 32 bits. expected highest possible integer value 2^31.

confusing me following: highest integer value can calculate 2^30. result shows 2^31 minimum integer value , not maximum. moreover, 2^32 should exceed max integer value , expected unpredicable result. instead 0.

example in c:

#include <stdio.h> #include <limits.h>  int main(void) {     int exp;     int pow = 1;      (exp = 0; exp < 33; exp++) {         printf("2 power of %d %d\n", exp, pow);         pow *= 2;     }      printf("%d\n", int_min);     printf("%d\n", int_max);      return 0; } 

example in c++:

#include <iostream> #include <limits>  using namespace std;  int main(void) {     int pow = 1;      (int exp = 0; exp < 33; exp++) {         cout << "2 power of " << exp << " " << pow << endl;         pow *= 2;     }      int imin = std::numeric_limits<int>::min(); // minimum value     int imax = std::numeric_limits<int>::max();      cout << imin << endl;     cout << imax << endl;      return 0; } 

output in both examples same:

2 power of 0 1 2 power of 1 2 2 power of 2 4 2 power of 3 8 2 power of 4 16 2 power of 5 32 2 power of 6 64 2 power of 7 128 2 power of 8 256 2 power of 9 512 2 power of 10 1024 2 power of 11 2048 2 power of 12 4096 2 power of 13 8192 2 power of 14 16384 2 power of 15 32768 2 power of 16 65536 2 power of 17 131072 2 power of 18 262144 2 power of 19 524288 2 power of 20 1048576 2 power of 21 2097152 2 power of 22 4194304 2 power of 23 8388608 2 power of 24 16777216 2 power of 25 33554432 2 power of 26 67108864 2 power of 27 134217728 2 power of 28 268435456 2 power of 29 536870912 2 power of 30 1073741824 2 power of 31 -2147483648 2 power of 32 0 -2147483648 2147483647 

signed integer overflow.

it's undefined behavior. getting 0 valid undefined result.

the largest integer in int.

it's 2^31 - 1, not 2^31. note int_max odd number.

two's complement

most systems ever encounter won't use signed magnitude represent signed numbers. instead use two's complement.


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -