美文网首页
c++ 无符号和有符号强转出现问题

c++ 无符号和有符号强转出现问题

作者: 送分童子笑嘻嘻 | 来源:发表于2019-10-14 19:03 被阅读0次

串口通信将16个字节的有符号分成两个8字节的无符号

#include <iostream>
#include<bitset>
using namespace std;
int main() {
    int x = 1<<7;
    bitset<16> bx(x);
    cout << "bx=" << bx << endl;
    //无符号转换为有符号 二进制没改,
    //负数前进位是很完美的,但是
    //前8个字节在强转,不会出问题,主要是后8个字节转换会出问题
    int16_t zhongli = 990;
    bitset<16> bs1(zhongli);
    cout << "bs1=" << bs1 << endl;

    int16_t zhongliqian = zhongli >> 8;
    bitset<16> bs2(zhongliqian);
    cout << "bs2=" << bs2 << endl;
    int8_t zhongliqian8 = (int8_t )zhongliqian;
    bitset<8> bs3(zhongliqian8);
    cout << "bs3=" << bs3 << endl;
    int8_t zhonglihou8 = (int8_t) zhongli;
    bitset<8> bs4(zhonglihou8);
    cout << "bs4=" << bs4 << endl;
    cout << "zhonglihou8=" << zhonglihou8 << endl;

    uint8_t uzhongliqian8 = (uint8_t) zhongliqian8;
    bitset<8> bs4u(uzhongliqian8);
    cout << "bs4u=" << bs4u << endl;
    uint8_t uzhonglihou8 = (uint8_t) zhonglihou8;
    bitset<8> bs5u(uzhonglihou8);
    cout << "bs5u=" << bs5u << endl;

    uint16_t uzhongliqian16 = (uint16_t) zhongliqian8<<8;
    bitset<16> bs5uu(uzhongliqian16);
    cout << "zhongliqian16=" << uzhongliqian16 << endl;
    cout << "bs5uu=" << bs5uu << endl;
    uint16_t uzhonglihou16 = (uint16_t)zhonglihou8;
    bitset<16> bs6uu(uzhonglihou16);
    cout << "zhonglihou16=" << uzhonglihou16 << endl;
    cout << "bs6uu=" << bs6uu << endl;

    int16_t zhongliqian16 = (int16_t) zhongliqian8<<8;
    bitset<16> bs5(zhongliqian16);
    cout << "zhongliqian16=" << zhongliqian16 << endl;
    cout << "bs5=" << bs5 << endl;
    int16_t zhonglihou16 = (int16_t)zhonglihou8;
    bitset<16> bs6(zhonglihou16);
    cout << "zhonglihou16=" << zhonglihou16 << endl;
    cout << "bs6=" << bs6 << endl;
    //通过下面这个方法,解决了后8个byte为负数时转为16进制前面全市1的问题
    if (zhonglihou16<0) {
        int8_t temp_zhonglihou8 = (1<<7)+zhonglihou8;
        bitset<16> bs6t(temp_zhonglihou8);
        cout << "bs6t=" << bs6t << endl;
        int16_t temp_zhonglihou16 = (int16_t)temp_zhonglihou8;
        temp_zhonglihou16 += (1<<7);
        bitset<16> bs6tt(temp_zhonglihou16);
        cout << "bs6tt=" << bs6tt << endl;
    }
return 0;
}

相关文章

  • c++ 无符号和有符号强转出现问题

    串口通信将16个字节的有符号分成两个8字节的无符号

  • 整形数据 C

    有符号 int long 进制 无符号 有符号和无符号的区别 http://www.cnblogs.com/laz...

  • C++ 面试知识点总结

    1. C++基础知识点 1.1 有符号类型和无符号类型 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值...

  • 强弱符号与强弱引用

    强弱符号与强弱引 概念 就C/C++而言: 强符号(Strong Symbol):已初始化的全局变量。 弱符号(W...

  • 弱符号和强符号

    链接过程实质上就是把不同目标文件粘在一起,对不同目标文件中定义或引用的相同名字进行决议resolve和绑定bi...

  • 2_有符号和无符号

    关键词:计算机中的符号位、有符号数的表示法、无符号数的表示法、signed和unsigned、无符号数和有符号数的...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1。比如1000_0000,则除...

  • 有符号数和无符号数

    1.无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值,表示非负数。 ...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1,比如1000_0000,则除...

  • 无符号和有符号的区别

    2016.10.24 无符号和有符号, 在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需要声...

网友评论

      本文标题:c++ 无符号和有符号强转出现问题

      本文链接:https://www.haomeiwen.com/subject/umcdmctx.html