Alg*_*ist 2 c
假设我有一个变量
int a = 512
现在,当我应用〜一个意味着在c中的一个补码.如何我得到-513作为输出.
int的大小至少为16位,二进制的当量为512
0000 0010 0000 0000现在,当你做一个补充时,就变成了
1111 1101 1111 1111.现在可以有人告诉我为什么输出为-513.
我现在可以希望这个论坛的人理解我的问题.
unw*_*ind 11
负数通常表示为二进制补码,这就是它被解释为原因的原因.
假设int是16位,你将拥有bitpattern 1111 1101 1111 1111.由于设置了最顶部位,因此该数字为负数.要转换为十进制,根据二进制补码的规则,该数字首先按位反转.这会带回你的512.然后添加一个,得到513.由于数字是负数,我们得到-513.
int
1111 1101 1111 1111
归档时间:
15 年,2 月 前
查看次数:
7376 次
最近记录:
12 年,11 月 前