取反的小运用

在讨论取反的运用之前,我们先把原码,反码,补码正规的过一遍

(反码补码都是让机器更方便地计算,计算机都是储存补码,原码方便人类理解)

1.真值:

一个数字的二进制表达方式去掉符号位便是真值,而取反并不是真值取反而是包括符号位一起取反

2.原码:

原码包括真值和符号位

3.反码:

正数的反码与原码相同。负数则是取反,不包括符号位(也就是真值取反)

4.补码:正数补码与原码相同,负数补码为反码加1

那么取反的巧妙运用来了:

由于取反直接作用于机器存储的,所以会比普通的++--快

取反的应用:

可以用于一个数的加一减一,也就是说可以经常用于循环中:

如何实现?

分类:

正数的取反:

正数的原码与补码相同:取反之后补码变成负数形式,由于负数形式的补码转化成原码需要经过-1变成反码再真值取反变成原码,所以会导致一个正数(包括0)取反后,会变成:

~i=-(i+1)(因为减一再真值取反相当于真值取反+1,再加上符号位)

此时,我们再加一个负号,就可以与++i功能相同,即-(~i)=i+1

负数的取反:

负数补码为真值取反+1,所以取反之后变成正数的补码,真值为原来的-1;

所以会变成:

~i=-i-1;即-2->1

当然,我们for循环一般为非负数,所以要利用这个达到--的效果,我们可以···这样:

~(-i)=i-1;即2->1

除此之外,我们可以利用负数取反等于取负减一,正数取反为取负减一,可以判断一个数是不是-1;

假如是-1就停止循环:

for(int i=n;~i;i--)

当i=0时也不会影响以上使用

但如果跨越了正负,负数也适用于以上结论,原因:

i=-(~i),负数取反变成正数-1,再取负,变成原来+1

i=~(-i),负数变成正数再取反,变成负数-1,还是--的效果

所以可以放心大胆的用,(看起来有点好玩哈哈)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部