很怪的C#取反操作符

fjtestnet 2010-02-25 11:52:09
int i =1;
Console.WriteLine(~i);
--------------------------输出-2
int i =2;
Console.WriteLine(~i);
--------------------------输出-3

也不知道是怎么得出的结果?怪事
...全文
636 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzsh0622 2010-02-26
  • 打赏
  • 举报
回复
可以用下面方法验证:
MessageBox.Show(Convert.ToString(-2, 2)); // -2的二进制数
MessageBox.Show(Convert.ToString(-1, 2)); // -1的二进制数
MessageBox.Show(Convert.ToString(-0, 2)); // 0的二进制数
threenewbee 2010-02-26
  • 打赏
  • 举报
回复
引用 5 楼 fjtestnet 的回复:
引用 2 楼 caozhy 的回复:0xFFFFFFFE 11111111111111111111111111111110 为-2 0xFFFFFFFF 11111111111111111111111111111111 为-1 0x00000000 00000000000000000000000000000000 为0 0x00000001 00000000000000000000000000000001 为1

0xFFFFFFFE 11111111111111111111111111111110 为-2

不是为-2147483646吗?

不是,第一位是符号位
-2147483648是 10000000000000000000000000000000
fjtestnet 2010-02-26
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
0xFFFFFFFE 11111111111111111111111111111110 为-2
0xFFFFFFFF 11111111111111111111111111111111 为-1
0x00000000 00000000000000000000000000000000 为0
0x00000001 00000000000000000000000000000001 为1


0xFFFFFFFE 11111111111111111111111111111110 为-2

不是为-2147483646吗?
Dobzhansky 2010-02-26
  • 打赏
  • 举报
回复
uint i = 1; 试试

long, ulong ..
lzsh0622 2010-02-26
  • 打赏
  • 举报
回复
~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。
0-->1
1-->0

threenewbee 2010-02-26
  • 打赏
  • 举报
回复
0xFFFFFFFE 11111111111111111111111111111110 为-2
0xFFFFFFFF 11111111111111111111111111111111 为-1
0x00000000 00000000000000000000000000000000 为0
0x00000001 00000000000000000000000000000001 为1
lzsh0622 2010-02-26
  • 打赏
  • 举报
回复
~ 运算符对操作数执行按位求补操作
vrhero 2010-02-26
  • 打赏
  • 举报
回复
取反是对二进制数的操作,int是有符号位的整型数类型...楼主需要补习计算机基础知识...

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧