分类: C/C++
2012-03-30 22:11:14
!是逻辑取反 !false = true
~ 是按位取反
如:int i = 3;
Console.WriteLine(~i);
打印出来时-4
执行过程是这样的:
c#中的int是有符号的32位。
所有3 在内存中的存储形式是: 00000000 00000000 00000000 00000011
取反后为:11111111 11111111 11111111 11111100
那么这个数是多少呢,1开头的,那就是负数,
负数在内存中的形式是补码。 补码就是 整数取反加1
所以 我们要先对11111111 11111111 11111111 11111100 减1
得到 11111111 11111111 11111111 11111011
再取反,那就还原了。得到00000000 00000000 00000000 00000100
所以是 -4