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位数据的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个 XMM 128 位寄存器拆分为两个 64 位整数寄存器?