Loading...
Navigation
Table of Contents

计算机综合Code

原码/补码

正数的原码等于补码; 负数的原码转补码过程如下: 非符号位取反加1 (加1后最高位需要进位时依然进位). 如-3的8位原码为1000 0011,补码为1111 1101. 计算机统一使用补码存储数字.

对于原码, +0-0分别是0000 00001000 0000, 而在补码中, +0-0都是0000 0000, 所以多了个1000 0000, 我们人为规定1000 0000是最小的那个负数(-2^8).

0111 1111 //最大正数, 加1后变成最小负数
1000 0000 // -2^-8, 最小负数
1111 1111 // -1
1000 0001 // -2^-8 + 1, 次小负数

最小最大int

climits文件和limits.h里定义了各种类型的最小最大值, 这两个头文件本质上是同一个文件, 因为climits里面指向的是limits.h

#include <limits.h>
//输出最大正数
cout << INT_MAX << 0x7fffffff << ((1 << 31) - 1) << 2147483647; //2^32 - 1
cout << INT_MIN << 0x80000000 << (1 << 31) << -2147483648; // 即-2^32

Last updated on Jun 19, 2019.