c#按位求补(~)

原码:

把一个数用二进制形式表示,如果是正数,原码就等于其二进制数,如果是负数,最高位,也就是最左边的那一位变成1

把一个数表示成二进制的时候注意,一定要比正常表示的二进制多4位,用来标记是正数还是负数

比如:12可以表示成1100,但是写的时候要比它多四位,也就是 0000 1100,最高位为0,表示为正,如果是-12,就是1000 1100

           25可以表示成0001 1001,要比它多四位,所以写成 0000 0001 1001,-25写成 1000 0001 1001

补码:

如果是正数,补码就等于其原码

如果是负数,除了符号位,其它全部取反,然后得到一个整数,再+1,转换成二进制,和原来的前四位的反码组合,就是其补码

比如:-12,原码为1000 1100,全部取反,1111 0011,这个二进制等于3,只计算后四位,前四位是表示是正数还是负数,不参与计算,3+1=4,表示成原码,就是1111 0100

符号位:

原码左边第一位,正数为0,负数为1

取补:

正数:先全部取反,然后求其补码

负数:先求其补码,再全部取反

比如:

12:原码 0000 1100  全部取反   1111 0011,补码:1000 1101 最高位为1 表示为负数,后四位计算为13,所以~12=-13

-12:原码 1000 1100 补码:1111 0100 全部取反  0000 1011 最高位为0 表示为正数,后四位计算为11,所以~-12=11

总结:

正数和负数的取补,为其相反数减一

比如上面的~12=-13,~-12=11,可以求证  ~23=-24   ~-23=22

你可能感兴趣的:(c#,c#,java,开发语言)