初学者学C++遇到的一些小疑点,

菜鸟学C++遇到的一些小问题,急急急!!

int a = 2;
cout<<~a<<endl;

为什么会输出-3呢??
code=c]
int a = 2;
cout<<!a<<endl;
[/code]
为什么会输出0呢??
code=c]
int a = 0;
cout<<!a<<endl;
[/code]
为什么会输出1呢??
code=c]
int a = -1;
cout<<!a<<endl;
[/code]
为什么会输出0呢??

有人可以解释一下~和!这两个运算符吗
------解决思路----------------------
~位运算操作符取反,!逻辑操作符
------解决思路----------------------
!是逻辑取反。对于逻辑运算符,只有true(1)和false(0)两个值。如果a=0,!a的结果是1;如果a是任何的非0值,!a的结果都是0.
!是按二进制对所有位取反。比如,2的二进制是00000010,按位取反得到11111101;9的二进制是00001001,按位取反得到11110110

------解决思路----------------------
http://blog.chinaunix.net/uid-25909722-id-2856108.html
------解决思路----------------------
引用:
Quote: 引用:

!是逻辑取反。对于逻辑运算符,只有true(1)和false(0)两个值。如果a=0,!a的结果是1;如果a是任何的非0值,!a的结果都是0.
!是按二进制对所有位取反。比如,2的二进制是00000010,按位取反得到11111101;9的二进制是00001001,按位取反得到11110110


int a = 2;
cout<<~a<<endl;
为什么会输出-3呢

整数是正还是负,是由符号位决定的。符号位就是整数的最高一位,正数的符号位是0,负数的符号位是1。一个整数按位取反之后,它的符号位也会取反,所以会改变正负。
楼主可以搜一下“补码”
http://blog.****.net/njuitjf/article/details/4585247

------解决思路----------------------
引用:
Quote: 引用:

!是逻辑取反。对于逻辑运算符,只有true(1)和false(0)两个值。如果a=0,!a的结果是1;如果a是任何的非0值,!a的结果都是0.
!是按二进制对所有位取反。比如,2的二进制是00000010,按位取反得到11111101;9的二进制是00001001,按位取反得到11110110


int a = 2;
cout<<~a<<endl;
为什么会输出-3呢

2:0000 0010
取反:1111 1101   ->这是结果,在计算机中以补码形式存在,是一个负数,最高位为1.
求上面数的原码:取反 ,+1:0000 0011 为3,又因为是负数,所以为-3.