参考文献1中对为什么计算机中需要使用原码、反码和补码做了详细的介绍,于是就想用C#写个程序进行验证。 程序需要实现的功能很简单: 1)可以将十进制整数转换为二进制整数,参考文献2中对如何将十进制转换为二进制做了详细的介绍; 2)可以计算二进制的原码、反码和补码,参考文献1中详细介绍了如何计算反码和补码,为什么计算机中要使用反码和补码,以及采用补码进行计算的原理; 3)计算原码、反码和补码形式下的二
正数的
补码
就是源码:
负数的
补码
是符号位不变,符号位不计入
计算
(1为负数,最高位是符号位),其余位取反,然后加1,然后把除了符号位的数据加个负号即可,因为
计算
出来的值是正值。
private Int32 GetComplementCode(int value)
byte symbol = (byte)(value >> 15);
if (symbol != 0)//负数
把一个数用二进制形式表示,如果是正数,
原码
就等于其二进制数,如果是负数,最高位,也就是最左边的那一位变成1
把一个数表示成二进制的时候注意,一定要比正常表示的二进制多4位,用来标记是正数还是负数
比如:12可以表示成1100,但是写的时候要比它多四位,也就是 0000 1100,最高位为0,表示为正,如果是-12,就是1000 1100
25可以表示成0001...
目录C语言数据类型内置类型类型的意义类型的基本归类整形家族浮点数家族构造类型指针类型空类型数据在内存中的存储整形在内存中的存储符号位
原码
反码
补码
原码
反码
补码
补码
转换
原码
大小端大小字节序大端存储模式小端存储模式为什么有大小端浮点数的数据存储浮点数的存储规则指数E
C语言数据类型
原码
是一种表示带符号整数的二进制编码方法,最高位是符号位,0表示正数,1表示负数。好处是数值的大小可以直接通过比较编码的大小来确定。但是
原码
计算
机不方便进行加减运算,因此引入
反码
和
补码
的概念。
反码
是负数的
补码
。求
反码
的方法就是正数的二进制位逐位取反,如果是负数则最高位符号位保持为1。
反码
的好处是正负数的加法可以转换为位操作,例如两个数的
反码
相加得到结果后,再对结果取
反码
即可得到正确的结果。
补码
是负数的另一种表示方法。求
补码
的方法是在
反码
的基础上加1。
补码
的好处是正负数的加法可以转换为位操作,而且
补码
的范围是均匀对称的,没有正负的数值边界,因此可以更方便地进行
计算
。
原码
、
反码
和
补码
之间的转换遵循一定的规则,以保证转换的正确性。具体来说:
- 如果是正数,
原码
、
反码
和
补码
都相同。
- 如果是负数,
原码
的符号位为1,
反码
的符号位为1,
补码
的符号位为1。
- 对于负数的
原码
,其表示的数值是符号位之外的位取反得到的。
- 对于负数的
反码
,其表示的数值是
原码
的符号位之外的位取反得到的。
- 对于负数的
补码
,其表示的数值是
反码
加1得到的。
通过这种转换,
计算
机可以方便地进行正负数的加减运算。在
计算
机内部,通常使用
补码
来表示负数,因为
补码
的运算更加高效。