simulink如何将一个64位数据高低压拆成两个32位数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了simulink如何将一个64位数据高低压拆成两个32位数据相关的知识,希望对你有一定的参考价值。

参考技术A 1、进入simulink。
2、点击输出数据类型选择,添加function模块。
3、实现double->single,实现single->double,注意前后数据类型一致。
4、调出sampletimelegend即可将一个64位数据高低压拆成两个32位数据。

P1100 高低位交换

大致题意:

  • 将n的二进制数求出后,前十六位与后十六位互换得到一个新的二进制数,并将它转换为十进制。

基本思路:

  • 先求n的二进制,
  • 交换高低位,
  • 转十进制,
  • 输出。

关于进制的相互转换可以看看我的 这一篇博客<<戳 ,里面有写。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
using namespace std;
#define R read()
#define GC getchar()
#define ll long long
#define ull unsigned long long
#define INF 0x7fffffff
#define LLINF 0x7fffffffffffffff
ll read(){
    ll s=0,f=1;
    char c=GC;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-f;c=GC;}
    while(c>=‘0‘&&c<=‘9‘){s=s*10+c-‘0‘;c=GC;}
    return s*f;
}
ll n,m;//好像不用long long也没问题,我为了保险就打上了qwq
ll t=1;
ll tmp[100],tot;
int main(){
    n=R;
    while(n){//10进制转2进制
        tmp[++tot]=n%2;
        n/=2;
    }
    for(int i=1,j=32;i<=16;++i,--j){//反过来,因为每次取模的数都应该从后往前放,但是并不知道要放多少个,所以就正着进来啦
        swap(tmp[i],tmp[j]);
    }
    for(int i=1,j=17;i<=16;++i,++j){//高低位交换
        swap(tmp[i],tmp[j]);
    }
    for(ll i=32;i>=1;--i){//2进制转10进制
        m+=tmp[i]*t;
        t*=2;
    }
    printf("%lld",m);
    return 0;
}

以上是关于simulink如何将一个64位数据高低压拆成两个32位数据的主要内容,如果未能解决你的问题,请参考以下文章

simulink 15 数据类型转化模块

如何将一个 XMM 128 位寄存器拆分为两个 64 位整数寄存器?

如何将两个32位整数组合成一个64位整数?

怎样用c++编程进行高低位互换?

如何将两个打包的 64 位四字加载到 128 位 xmm 寄存器中

simulink中【(1,500)-(10,20000)】如何表示