原码,补码,反码,进制相关问题

//    闲来无事来写写东西,不得不吐槽校园生活真的太无聊了,可能我这是个带专吧

//2022.9.2  21:58

今天来聊聊原码,补码,反码。对二进制这些东西,我觉得实在绕啊,不知道是不是只有我一个人这样,淦

   先来总体说说这仨哥们是干啥的吧:计算机存储数据都是补码,原码不能直接参与运算,反码是原码转补码的过度码

补码的优势主要在于统一加减法,在做加减的时候不用考虑是否有符号

在计算机中底层存储数据都是二进制嘛,这涉及到硬件的一些知识,貌似跟芯片里的晶体管有关?好像是有分强电流和弱电流,然后只能有两种情况,人为的把他记为0和1,这样就构成了数据的储存方式(我也不太了解,大概说说)

以下都以char类型进行说明,char类型都是一个字节,8个比特

讲讲原码,二进制的一些东西,举个例子数字7的原码就是0000 0111,具体的算法就是4+2+1,这里就是最低为的1是2的0次方,第二位的1是2的一次方,以此类推,然后关于负数,因为没办法表达负数的东西,所以就用最高位的代表正负号,0就是代表正号,1是代表负号。所以-7的原码就是1000 0111.这个部分相对简单

讲讲反码,反码这东西就是天生的配角吧我觉得,反码是用来辅助用原码推出补码的,具体规则就是正数的反码和原码相同,负数的反码是除了最高位,其余的全部要相反,例如-7的原码是1000 0111,它的反码是1111 1000.

讲讲补码,也就是计算机储存数据用的东西,如果不用反码进行计算,就是可以有另一种方法,就是用0001 0000 0000来减去+7(0000 0000 0111),就会得到-7的补码,也就是0000 1111 1001,但是这样算会比较慢,一般用反码来算会比较快,例如-7的反码是1111 1000,那么-7的补码只需要在反码的基础上+1即可,-7的补码就是0000 1111 1001

接下来讲讲进制转换的问题啊,如何将二进制迅速转换为16进制嘞?这里用到了进制转换表

//明天写吧,累了,23:50了

第二天早晨了哇,讲讲如何在二进制和16进制中反复横跳

首先就是要准备一张二进制转十六进制的表格啊

原码,补码,反码,进制相关问题_第1张图片

来讲讲这玩意咋使,举个2转16的例子

16转2:   EF56对应的二进制是1110 1111 0101 0110 同理二进制转十六进制也只需要取四位对照着表转化就行 八进制转二进制取三位对照着表转化即可

八转二:5612对应的二进制是101110001010

总结 无脑看表即可

 

你可能感兴趣的:(c语言)