直接感受整数小数真值变化时,原码反码补码是如何变化的

整数真值原码反码补码小数真值
-128--10000000-1
-127111111111000000010000001 − 1 + 2 − n -1+2^{-n} 1+2n
-126111111101000000110000010
-125111111011000001010000011
-124111111001000001110000100
-123111110111000010010000101
-122111110101000010110000110
-121111110011000011010000111
-120111110001000011110001000
-119111101111000100010001001
-118111101101000100110001010
-117111101011000101010001011
-116111101001000101110001100
-115111100111000110010001101
-114111100101000110110001110
-113111100011000111010001111
-112111100001000111110010000
-111111011111001000010010001
-110111011101001000110010010
-109111011011001001010010011
-108111011001001001110010100
-107111010111001010010010101
-106111010101001010110010110
-105111010011001011010010111
-104111010001001011110011000
-103111001111001100010011001
-102111001101001100110011010
-101111001011001101010011011
-100111001001001101110011100
-99111000111001110010011101
-98111000101001110110011110
-97111000011001111010011111
-96111000001001111110100000
-95110111111010000010100001
-94110111101010000110100010
-93110111011010001010100011
-92110111001010001110100100
-91110110111010010010100101
-90110110101010010110100110
-89110110011010011010100111
-88110110001010011110101000
-87110101111010100010101001
-86110101101010100110101010
-85110101011010101010101011
-84110101001010101110101100
-83110100111010110010101101
-82110100101010110110101110
-81110100011010111010101111
-80110100001010111110110000
-79110011111011000010110001
-78110011101011000110110010
-77110011011011001010110011
-76110011001011001110110100
-75110010111011010010110101
-74110010101011010110110110
-73110010011011011010110111
-72110010001011011110111000
-71110001111011100010111001
-70110001101011100110111010
-69110001011011101010111011
-68110001001011101110111100
-67110000111011110010111101
-66110000101011110110111110
-65110000011011111010111111
-64110000001011111111000000
-63101111111100000011000001
-62101111101100000111000010
-61101111011100001011000011
-60101111001100001111000100
-59101110111100010011000101
-58101110101100010111000110
-57101110011100011011000111
-56101110001100011111001000
-55101101111100100011001001
-54101101101100100111001010
-53101101011100101011001011
-52101101001100101111001100
-51101100111100110011001101
-50101100101100110111001110
-49101100011100111011001111
-48101100001100111111010000
-47101011111101000011010001
-46101011101101000111010010
-45101011011101001011010011
-44101011001101001111010100
-43101010111101010011010101
-42101010101101010111010110
-41101010011101011011010111
-40101010001101011111011000
-39101001111101100011011001
-38101001101101100111011010
-37101001011101101011011011
-36101001001101101111011100
-35101000111101110011011101
-34101000101101110111011110
-33101000011101111011011111
-32101000001101111111100000
-31100111111110000011100001
-30100111101110000111100010
-29100111011110001011100011
-28100111001110001111100100
-27100110111110010011100101
-26100110101110010111100110
-25100110011110011011100111
-24100110001110011111101000
-23100101111110100011101001
-22100101101110100111101010
-21100101011110101011101011
-20100101001110101111101100
-19100100111110110011101101
-18100100101110110111101110
-17100100011110111011101111
-16100100001110111111110000
-15100011111111000011110001
-14100011101111000111110010
-13100011011111001011110011
-12100011001111001111110100
-11100010111111010011110101
-10100010101111010111110110
-9100010011111011011110111
-8100010001111011111111000
-7100001111111100011111001
-6100001101111100111111010
-5100001011111101011111011
-4100001001111101111111100
-3100000111111110011111101
-2100000101111110111111110
-1100000011111111011111111 − 2 − n -2^{-n} 2n
-01000000011111111--0
+0000000000000000000000000+0
1000000010000000100000001
2000000100000001000000010
3000000110000001100000011
4000001000000010000000100
5000001010000010100000101
6000001100000011000000110
7000001110000011100000111
8000010000000100000001000
9000010010000100100001001
10000010100000101000001010
11000010110000101100001011
12000011000000110000001100
13000011010000110100001101
14000011100000111000001110
15000011110000111100001111
16000100000001000000010000
17000100010001000100010001
18000100100001001000010010
19000100110001001100010011
20000101000001010000010100
21000101010001010100010101
22000101100001011000010110
23000101110001011100010111
24000110000001100000011000
25000110010001100100011001
26000110100001101000011010
27000110110001101100011011
28000111000001110000011100
29000111010001110100011101
30000111100001111000011110
31000111110001111100011111
32001000000010000000100000
33001000010010000100100001
34001000100010001000100010
35001000110010001100100011
36001001000010010000100100
37001001010010010100100101
38001001100010011000100110
39001001110010011100100111
40001010000010100000101000
41001010010010100100101001
42001010100010101000101010
43001010110010101100101011
44001011000010110000101100
45001011010010110100101101
46001011100010111000101110
47001011110010111100101111
48001100000011000000110000
49001100010011000100110001
50001100100011001000110010
51001100110011001100110011
52001101000011010000110100
53001101010011010100110101
54001101100011011000110110
55001101110011011100110111
56001110000011100000111000
57001110010011100100111001
58001110100011101000111010
59001110110011101100111011
60001111000011110000111100
61001111010011110100111101
62001111100011111000111110
63001111110011111100111111
64010000000100000001000000
65010000010100000101000001
66010000100100001001000010
67010000110100001101000011
68010001000100010001000100
69010001010100010101000101
70010001100100011001000110
71010001110100011101000111
72010010000100100001001000
73010010010100100101001001
74010010100100101001001010
75010010110100101101001011
76010011000100110001001100
77010011010100110101001101
78010011100100111001001110
79010011110100111101001111
80010100000101000001010000
81010100010101000101010001
82010100100101001001010010
83010100110101001101010011
84010101000101010001010100
85010101010101010101010101
86010101100101011001010110
87010101110101011101010111
88010110000101100001011000
89010110010101100101011001
90010110100101101001011010
91010110110101101101011011
92010111000101110001011100
93010111010101110101011101
94010111100101111001011110
95010111110101111101011111
96011000000110000001100000
97011000010110000101100001
98011000100110001001100010
99011000110110001101100011
100011001000110010001100100
101011001010110010101100101
102011001100110011001100110
103011001110110011101100111
104011010000110100001101000
105011010010110100101101001
106011010100110101001101010
107011010110110101101101011
108011011000110110001101100
109011011010110110101101101
110011011100110111001101110
111011011110110111101101111
112011100000111000001110000
113011100010111000101110001
114011100100111001001110010
115011100110111001101110011
116011101000111010001110100
117011101010111010101110101
118011101100111011001110110
119011101110111011101110111
120011110000111100001111000
121011110010111100101111001
122011110100111101001111010
123011110110111101101111011
124011111000111110001111100
125011111010111110101111101
126011111100111111001111110
127011111110111111101111111 1 − 2 − n 1-2^{-n} 12n
//前言:只计算了-127~127,一位符号位
//+-0不计入内,补码-128不计入内
//简而言之,就是看一下数字趋势

#include <iostream>
using namespace std;
class rownum
{
private:
    char dat;           //原码
    char _2_[8] = {0};  //保存二进制数据
public:
    rownum(){};
    void setdat(char d){dat = d;}   //设置原码
    void readat(){cout<<(int)dat;}  //读取十进制原码
    void ShowRaw(); //显示二进制原码
    void ShowFan(); //显示二进制反码
    void ShowBu();  //显示二进制补码
};
void rownum::ShowRaw()
{
    unsigned char temp;
    dat>0?temp = dat:temp = -dat;
    _2_[7] = temp%2;
    _2_[6] = temp/2%2;
    _2_[5] = temp/4%2;
    _2_[4] = temp/8%2;
    _2_[3] = temp/16%2;
    _2_[2] = temp/32%2;
    _2_[1] = temp/64%2;
    _2_[0] = dat >= 0?0:1; //这里保存的是符号位

     for(int i = 0; i < 8;i++)cout << (int)_2_[i]; 
}
void rownum::ShowFan()
{
    if(_2_[0])
    {   //符号位不取反
        for(int i = 1; i < 8;i++)
            (0== _2_[i])?(_2_[i] = 1):(_2_[i] = 0);
    }
    for(int i = 0; i < 8;i++)cout << (int)_2_[i]; 
}
void rownum::ShowBu()
{
    char jingwei = 0;
    if(_2_[0])
    {
        for (char i = 7; i > 0; i--)
        {
            //这里是一个8位的二进制数加1位的二进制数,计算方法较8+8简化许多
            if(2 == _2_[i]+1)//如果有进位,那么接下来可能继续进位
                {jingwei = 1;_2_[i] = 0;}
            else            //如果没有了进位,接下来就不可能进位
                {_2_[i] += 1;break;}
        }
    }
    for(int i = 0; i < 8;i++)cout << (int)_2_[i]; 

}

int main()
{
    rownum mydat;
    for(int i = -127;i < 128;i++)
    {   
        mydat.setdat(i);
        mydat.readat(); cout << "|";
        mydat.ShowRaw();cout << "|";
        mydat.ShowFan();cout << "|";
        mydat.ShowBu();cout << "|";
        cout << endl;
    }
    system("pause");
}

注意:表格内容是代码输出内容略作修改的。
Tips:命令行环境下,xxx.exe > xxx.txt可以将输出内容重定向到文本文件里,便于查看。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝地亚狂想曲

送我一瓶农夫山泉?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值