2009
03-31

#include <stdio.h>


void main()


{


int i;


unsigned int j;


i=~0;


j=~0;


printf(“i=%d,j=%d”,i,j);


}


 


为什么i=-1,j=-1?


(-1怎么来的?)


这个问题!》有 1 条评论

  1. whos 说:

    要解决这个问题首先要知道什么是原码、反码和补码,这些东西书上都有,可以自己去看。需要记得的是:

    1.有符号整数在内存中是按补码的形式存放的(0 — 正,1 — 负);无符号整数只能是正数,在计算机中是以绝对值形式存放的。

    2.~是按位取反运算符

    一个整数有正负之分,在计算机中 0 也有 +0 和 -0 之分(IEEE标准),默认情况下为 +0

     0(10进制)= 00000000

    按位取反后 ~0(10进制) = 11111111

    由于最高位为1,表示负数,所以二进制形式 11111111 表示一个负数的补码

    那么这个负数是什么呢?我们再来转换一下

    将其转化为反码为 11111111 – 1 = 11111110

    再转化为原码(符号位不变,其余按位取反):10000001

    所以 100000001(二进制)= -1

    以上仅作参考,如有错误请指正。

    呵呵……

留下一个回复