C++ 原码反码补码
教程导读
学研发网的这篇信息学奥赛技术教程文章主要介绍了C++ 原码反码补码,现在分享给大家,供学习和参考。文章包含1242字,纯文字阅读大概需要4分钟。
教程信息
学习目标
了解原码反码补码
在学习原码、反码、补码之前,需要先了解机器数和真值的概念。
一、机器数和真值
1、机器数
机器数是在计算机中用二进制
形式表示的数字。它可以是整数、浮点数等各种数值类型。
在计算机内部,数字以二进制位的形式存储,这些二进制位被解释为不同的数据类型,如整数、浮点数等。
比如十进制数 +3
,计算机字长为8位,那么转换成二进制就是 00000011
。
如果是十进制数 -3
,那么转换成二进制数就是 10000011
。第一位为符号位,最高位1
表示负数。
这里的 00000011
和 10000011
就是机器数。
2、真值
真值是机器数所代表的实际数值,即在现实世界中的数值。
但是机器数的第一位为符号位,所以机器数的形式值就不等于真值的数值。
如上面有符号数的例子,10000011
其最高位 1
代表负数。所以,机器数和真值之间的表示要区分符号位。
例如:
0000 0001 的真值是 +000 0001 就是 +1; 1000 1001 的真值是 -000 0001 就是 -1;
在计算机中,由于有限的位数和精度限制,机器数可能无法精确地表示真实的实数,因此真值与机器数之间可能存在舍入误差。
二、数的原码、反码和补码表示
原码、反码、补码是计算机存储一个具体数字的编码方式。数值在计算机中是以补码
的方式存储的。
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
比如 8 位的二进制:
+1的原码是:0000 0001 -1的原码是:1000 0001
因为第一位是符号位,所以 8 位二进制的取值范围就是:
10000000 ~ 0111 1111 也就是 -128 ~ 127
2、反码
反码表示法是:
正数的反码是其本身;
负数的反码是在其原码的基础上,符号位不变,其余各位取反。
[+1]原 = [0000 0001]原 = [0000 0001]反 [-1]原 = [1000 0001]原 = [1111 1110]反
3、补码
补码表示法是:
正数的补码是其本身;
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)
[+1]原 = [0000 0001]原 = [0000 0001]反 = [0000 0001]补 [-1]原 = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
4、补码的优势
补码表示法能够统一地表示正数和负数,而无需使用额外的标志位。这简化了运算和判断。
-3 的补码表示:10000011
+2 的补码表示:00000010
10000011 (-3) + 00000010 (+2) ----------- 10000101 (-1)
补码的加法运算与正数和负数的加法运算一致,无需额外的步骤或逻辑。这是因为补码的加法运算将正数和负数都视为相同的二进制操作。
补码存储方式在数值表示、运算和处理负数等方面提供了很多优势,使得计算机可以更有效地进行各种数值计算和处理。
教程咨询
如果章节内容看不懂,可以联系作者。
教程总结
以上是学研发网为您提供C++ 原码反码补码的全部内容,希望教程文章能够帮你了解学习C++ 原码反码补码,解决所遇到的问题。 如果觉得学研发网信息学奥赛教程内容还不错,欢迎将学研发网网站推荐给身边需要的人。
教程备注
版权声明:教程内容为学研发网整理和编写,如需转载请联系站长并附上文章原始链接和原始作者信息。
手机阅读
扫描二维码推送至手机访问。
本文链接:http://www.xueyanfa.com/xinaojiaocheng/xinaocpp-92.html