码迷,mamicode.com
首页 > 其他好文 > 详细

关于原码反码补码以及位元算

时间:2016-09-07 22:57:03      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

  首先人脑能识别的,也就是我们常写的就是原码,因为数字都有正负之分所以,二进制的时候用最高位表示正负,0为正,1为负,例如3二进制位00000011,-3二进制位10000011.

  反码:正数的反码等于其本身,负数的反码:符号位不变其他位取反。(00000011)原=(00000011)反,(10000011)原=(11111100)反,为什么会有反码呐,因为用原码进行计算的时候:

比如3-3=3+(-3)=(00000011)原+(10000011)原=10000110=134,就会出现这样的误差,计算机是不会有人脑这种识别的,所以就引进了反码,3-3=3+(-3)=(00000011)原+(10000011)原=(00000011)反+(11111100)反=10000000=-0,这样结果就对了,有的人认为+0和-0有差别,所以就有引进了补码进行让计算机操作。

  补码:整数的补码等于其本身,负数的补码:符号位不变其他位取反然后+1。这样3+(-3)=(00000011)原+(10000011)原=(00000011)反+(11111100)反=(00000011)补+(11111101)补=(00000000)=+0;所以就没有了正负0之分;

  位元算:值得一提的位元算,以前就看过位运算,自以为很了解但是只是皮毛,因为以前只用整数的位运算,对负数不是很了解,最近学树状数组,遍历的时候用到了x&(-x)很神奇的啊,后来查了资料才发现,原来计算机的位元算都是用补码进行的位元算,而整数的反码补码就是其本身所以没什么影响,但是负数就不一样了,x&(-x)的实际作用就是取x二进制中从低位开始的0的个数,比如12=00001100,那12&(-12)=00000100=4,这样就达到了树状数组的要求了。

关于原码反码补码以及位元算

标签:

原文地址:http://www.cnblogs.com/wuwangchuxin0924/p/5851067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!