| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include <stdio.h> 
int main(void) 
{ 
        int i = 2147483647; 
        unsigned int j = 4294967295; 
 
        printf("%d %d %d\n", i, i + 1, i + 2); 
        printf("%u %u %u\n", j, j + 1, j + 2); 
 
        getchar(); 
        return 0; 
} 
我想问下问什么i+1会变成-2147483648而不是变成-2147483647 
 
 本帖最后由 pheron 于 2018-10-19 09:28 编辑  
 
由于计算机不会算减法,只会加法,所以数字在计算机里都直接存储为2进制补码。 
举个栗子:假设这是一个8位机。127 = 0111 1111, 那么0111 1111 + 1 = 1000 0000 补码转为原码:首先符号位即第一位不参与运算,其余为取反:1000 0000→1111 1111 ,即-127然后还要+1,即-128。 
如果你问我为什么0111 1111 + 1 的时候为什么符号位参与运算,我只能说符号位参与运算是为了做减法运算,符号位参与运算能保证符号的正确性。如果你还要问为什么。。。我也可以再给你放个链接  https://fishc.com.cn/forum.php?mod=viewthread&tid=124184&page=1#pid3596476这里如果还是看不懂的话,建议仔细看看书上对原码反码补码的讲解 
 
 
 |   
 
 
 
 |