很多朋友在学习计算机相关课程的时候,经常会听到原码、反码、补码之类的词,但是很少有人能明白它们是干什么用的。但随着编程的深入,我们知道计算机中只能存储0和1的二进制代码,所有的数据类型最终都会转换成二进制代码然后存储在内存中。所以理解这些知识可以帮助你理解值是如何在内存中存储的。
而基数转换也是一个关键点。无论是大学期末考试,还是找工作时的面试题,这都是需要了解的知识。今天冷月就带大家整理一下原码、反码、补码的相关知识,讲解基数转换的方法。
原始代码
原码也称为符号绝对值码;最高位0代表正数,最高位1代表负数,其余二进制位为该数绝对值的二进制位。也就是说,原码的最高位代表是正数还是负数,其余数字则代表具体值。
例如:假设:我们用8位二进制来表示一个数字,+11的原码是00001011,-11的原码是10001011
原码简单易懂,但其加减运算较复杂,且零的表示方式不唯一,因此该值的原码并不直接存储在计算机中。
反码
补码通常用于求原码的补码或从补码求原码的转移码。直接将二进制位按位取反。但补码的运算并没有重复,也没有在计算机中得到应用。
假设:我们用8位二进制来表示一个数,+11的补码是11110100,-11的原码是01110100
补充
在计算机系统中,数值总是使用二进制补码来表示和存储。原因是使用补码可以对符号位和数值域进行统一处理;同时也可以统一处理加减法。
如下图:
8421 法案
一种将二进制转换为十六进制的简单方法。简单来说,十六进制表示16种状态,而用二进制表示16种状态,需要4位。因此,我们用4位二进制数来表示1位十六进制数,其余数字用0填充。
对应的4位二进制数等于十进制的8 4 2 1。
如下图:
基数转换(补码)
给定十进制,找到二进制:
求一个正整数的二进制(补数)数:除以2取余,直到商为0,将余数倒序排列。
求负整数的二进制(补码)码:先求负数对应的正整数的二进制补码,然后将所有位取反,最后加1。如果位数不够,则在左边加1。
找到零的二进制(补码)数:它全是零。
#includestdio.h
/*
*/
int main()
{
printf('%#X\n',18); //输出0X12
printf('%#X\n',-18); //输出0XFFFFFFEE
返回0;
}
我们来分析一下上面的操作。我们知道,正数的原码、补码和补码是相同的。在C语言中,int类型在内存中分配4个字节,即32位。在C语言中,不能直接输出二进制,所以我们输出十六进制。如下图:
求给定二进制补码的十进制数:
如果第一位是0,则表示是正整数。使用普通方法即可找到;如果第一位是1,则表示是负整数。将所有位反转并在末尾加1。结果数是负数的绝对值;如果全部为0 ,则对应的十进制数为0
#includestdio.h
/*
*/
int main()
{
printf('%d\n',0X12); //输出18
printf('%d\n',0XFFFFFFEE); //输出-18
返回0;
}
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/4117.html
用户评论
太棒了!终于搞懂原码、反码和补码之间的关系了!
有8位网友表示赞同!
文章很清晰,讲得通俗易懂,终于理解了十六进制转换的原理。
有14位网友表示赞同!
这篇文章简直是拯救了我,之前对补码总是理解不了,现在终于搞懂了。
有12位网友表示赞同!
强烈推荐!看完这篇文章,对原码、反码和补码有了全新的认识。
有7位网友表示赞同!
写的太好了,不仅解释了原理,还用例子说明,更容易理解。
有14位网友表示赞同!
终于找到一篇讲得明白的文章了,以后再也不怕补码了!
有17位网友表示赞同!
原来十六进制转换这么简单,这篇文章让我豁然开朗。
有8位网友表示赞同!
感谢作者,文章内容很实用,学到了很多新知识。
有9位网友表示赞同!
终于找到一篇能让我理解原码、反码和补码的文章了。
有16位网友表示赞同!
这篇文章简直是编程学习的宝典!
有15位网友表示赞同!
文章结构清晰,内容完整,非常适合初学者学习。
有18位网友表示赞同!
终于能理解原码、反码、补码和十六进制转换之间的联系了。
有14位网友表示赞同!
作者用通俗易懂的语言解释了复杂的知识,非常棒!
有17位网友表示赞同!
这篇文章让我对计算机底层有了更深入的了解。
有20位网友表示赞同!
强烈推荐给所有想要学习原码、反码、补码和十六进制转换的人。
有8位网友表示赞同!
文章内容很丰富,涵盖了所有重要的知识点。
有12位网友表示赞同!
这篇文章让我对计算机的运行机制有了更深的认识。
有19位网友表示赞同!
以后再也不用担心十六进制转换的问题了,谢谢作者!
有14位网友表示赞同!
终于找到了一篇能让我理解原码、反码、补码和十六进制转换的良心文章!
有15位网友表示赞同!
强烈推荐这篇文章,对于学习计算机基础知识非常有帮助。
有17位网友表示赞同!