大数 旋转(循环位移)

需求

  • 需求:对于一个长度为128位的无符号整数,在只有最大UINT64的环境下,实现循环左移的操作。

分析


分析:循环位移的算法实现思路:
例:num(UINT16) 循环左移 i 位
1.将num左移i位
num << i
2.将num右移 总位数-i 位
num >>(16 - i)
3.将两个数进行或运算
(num << i) ^ (num >> (16 - i))


在这里插入图片描述

但是对于大数,无法直接对数字进行运算。所以采取对大数分割成可以计算的小数,以128位数为例,分割成16个8位整数 UINT8[16] 对每个字节单独计算

单个字节的计算与上述位移思想类似,但是一个单独字节旋转位移的结果设计两个相邻的单独字节

在这里插入图片描述
以第0字节为例,为第0字节左移的部分和1字节右移的部分或运算得到

实现

实现代码

// 旋转的数 temp  ,旋转位数 num
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值