Chinaunix首页 | 论坛 | 博客
  • 博客访问: 476498
  • 博文数量: 73
  • 博客积分: 1170
  • 博客等级: 少尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-20 15:48
文章分类

全部博文(73)

文章存档

2013年(9)

2012年(64)

我的朋友

分类: 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

阅读(2128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~