十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
按位取反
成都创新互联是一家专业提供元宝企业网站建设,专注与网站设计、网站建设、HTML5、小程序制作等业务。10年已为元宝众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
~ 01101101
10010010
结论:对二进制数按位取反,即0变成1,1变成0。
5:00000101取反:11111010因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001再变为原码10000110,即-6
525:000001012:00000010与就是各个位做与运算..10=000=011=1结果就是00000000
按位取反就是每一位都取反,所谓取反就是1变0,0变1
比如楼主说的10
二进制表示就是00000000
00000000
00000000
00001010
取反后就是11111111
11111111
11111111
11110101
这在十进制中就是-11
而他的二进制原码表示就是-1011
这个问题涉及到计算机内部的编码。
对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负。
对于负数,为了便于计算,计算机用补码来表示其值。
已经一个数的补码,要知道其值分两种情况:
1:符号位是0,正数,所以后面的二进制位则表示大小,即正数的原码=其补码。如1表示出来则为00000001(我这里用八位来表示,也可以用16位或32位)
2:符号位是1,负数,这时候需要把后面的数取反再加一(要问为什么?查一下资料吧,可以根据补码的特性推出来),所以11111110表示的数是1111110取反为0000001,再加1,则为0000002。算上符号位,就是-2。
以你的例子来说,
a=0=0000 0000 0000 0000 0000 0000 0000 0000
~a = 1111 1111 1111 1111 1111 1111 1111 1111
符号位是1,后面的数取反再+1
1000 0000 0000 0000 0000 0000 0000 0001 = -1
你用4位表示太少了,没法表示标志位。你可以用8位试试\x0d\x0a首先给你讲讲负数是怎么存2进制的,就是将其正数部分取反后+1。那么,我们逆推回去,由负数(标志位是1,即首位是1)减去1,然后再取反,是不是就得到了负数的正数部分?\x0d\x0a\x0d\x0a5=00000101(B)\x0d\x0a对5取 ~5 = 11111010(B)(首位是1,说明是负数)\x0d\x0a然后减去1 = 11111001(B) \x0d\x0a然后取反 = 00000110(B) = 6(D) 这就是结果的正数部分\x0d\x0a你算一下最后的结果11111010(B)的正数部分是不是6呢?所以嘛~5=-6