VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 4357|回复: 3

需要使用128位类型怎么办?

[复制链接]
35_avatar_middle
最佳答案
0 
online_vip 发表于 2019-3-26 00:42:48 | 显示全部楼层 |阅读模式
3驿站币
ULONG64 不够用
需要128位整形
但VC不支持,怎么办啊?
还有128位整形+ - * / % &等等
哪位老哥教一下吧
小弟C++一般般
网上给我那些代码用不了
哎......





上一篇:关于OPENCV中HoughLines函数中获取直线的算法问题
下一篇:新人请教学完C++基础后续如何学习问题
08_avatar_middle
最佳答案
3 
在线会员 发表于 2019-3-26 09:10:06 | 显示全部楼层
C++11和14标准了解下。但是很少IDE支持。
目前支持C++11的编译器
gcc 4.8以上版本
clang 3.1 以上版本
VS2013 及以上版本(有部分C11特性不支持)
DEV-C++最新版本都是支持C++11的(在编译选型中打开)
其他诸如Pelles C之类的小众编译器,基本也都支持了C++11
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-26 10:29:47 | 显示全部楼层
c++ 有种东西叫  hugeinteger
你可以模仿它
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-26 21:36:15 | 显示全部楼层
本帖最后由 xx_player 于 2019-3-27 11:25 编辑

这要看是你是专业解决,还是普通解决。普通解决很简单,
定义结构 BYTE m128[16]。
低64位数据l,高64位数据h,则
写低64位memcpy(m128,l,8);
写高64位memcpy(&m128[8],h,8);
要运算就要专业解决,
专业到intel网站,下载 325462-sdm-vol-1-2abcd-3abcd.pdf,只有英文版,使力看
第10,11,12章和卷2附录
其中10章sse 支持128位单精度,64位整数
       11章sse2支持128位双精度,128位整数
       12章sse3,sse4都支持。
       附录为c指令集

专业128位需要64位OS。

VC不支持观点是错误地。如果VC2015装到XP上,它64位也无法支持。
128位要到64位机器上跑。
然后动手实验:
添加C包含头:
#include <xmmintrin.h>
#include <emmintrin.h>

int main()
{
        __m128i x,y,z;
        x.m128i_i32[0] = 11111111;
        x.m128i_i32[1] = 0;
        x.m128i_i32[2] = 123000;
        x.m128i_i32[3] = 0;
        y.m128i_i32[0] = 22222222;
        y.m128i_i32[1] = 0;
        y.m128i_i32[2] = 587000;
        y.m128i_i32[3] = 0;
        z= _mm_add_epi32(x, y);
        cout << "x=(0-32位)"   <<   x.m128i_i32[0] << endl;
        cout << "x=(32-64位)"  <<   x.m128i_i32[1] << endl;
        cout << "x=(64-96位)"  <<   x.m128i_i32[2] << endl;
        cout << "x=(96-128位)" <<   x.m128i_i32[3] << endl;
        cout << "y=(0-32位)"   <<   y.m128i_i32[0] << endl;
        cout << "y=(32-64位)"  <<   y.m128i_i32[1] << endl;
        cout << "y=(64-96位)"  <<   y.m128i_i32[2] << endl;
        cout << "y=(96-128位)" <<   y.m128i_i32[3] << endl;
        cout << "y=(0-32位)"   <<   z.m128i_i32[0] << endl;
        cout << "y=(32-64位)"  <<   z.m128i_i32[1] << endl;
        cout << "y=(64-96位)"  <<   z.m128i_i32[2] << endl;
        cout << "y=(96-128位)" <<   z.m128i_i32[3] << endl;
}
运行结果
x=(0-32位)11111111
x=(32-64位)0
x=(64-96位)123000
x=(96-128位)0
y=(0-32位)22222222
y=(32-64位)0
y=(64-96位)587000
y=(96-128位)0
y=(0-32位)33333333
y=(32-64位)0
y=(64-96位)710000
y=(96-128位)0
请按任意键继续. . .

以上是实现整数加。还要减,乘,除等,打开头文件在里面找。
千万不要把128位理解为一个结果数。它的本意是
并行处理2个64位或4个32位数。
不是搞那么长只装一个数。



需要使用128位类型怎么办?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-31 06:48

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表