吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1395|回复: 26
收起左侧

[求助] 关于位运算 求助 ,取中间 指定的长度

[复制链接]
kanlai 发表于 2021-1-4 12:39
比如说 有个二进制 数据 1001011011100001

而想要取得 110111    既 10010 (110111 )00001  该怎么取  ?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

emir 发表于 2021-1-4 12:52
Python有切片   这个vc不大懂
柑子ray 发表于 2021-1-4 13:05
我的想法:原数据和0000011111100000进行与运算,得到0000011011100000,右移5位得到0000000000110111,代码表示不会,哈哈
漁滒 发表于 2021-1-4 13:06
[Python] 纯文本查看 复制代码
    data = 38625
    print(bin(data))  # 0b1001011011100001
    data2 = (data - (data >> 11 << 11)) >> 5
    print(bin(data2))  # 0b110111
klamauk 发表于 2021-1-4 13:06
1001011011100001 & 00000 111111 00000
为什么这様子 发表于 2021-1-4 13:08
跟大佬学到了。。。
小小的石头13 发表于 2021-1-4 13:16
跟大佬学到了。。。
 楼主| kanlai 发表于 2021-1-4 13:23
柑子ray 发表于 2021-1-4 13:05
我的想法:原数据和0000011111100000进行与运算,得到0000011011100000,右移5位得到0000000000110111,代 ...

想到办法了

int 型范围 是 -2147483647  到 2147483647

而二进制 int 类型的  长度是32位  而要取的值 是右边 也就是低位。12个

需要 左移 32-12=20 位

这样 就是把  11011100001 放到高位 低位补0  是一个完整的 32位二进制 数据。

在 右移 25位 也就是低位的20个0   和  高位的00001  就是这个了。

笨办法


逝去的初夏 发表于 2021-1-4 13:23
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
    int n = 0b1001011011100001;
    //10010 (110111 )00001
    f(n,4,10);
}
public static void f(int n,int i,int j){
    int left = i,right = j;
    StringBuffer sb = new StringBuffer();
    for(;right > left;right--)sb.append(( n >>> right ) & 1);
    System.out.println(sb.toString());
}


i和j可能处理的有点绕
 楼主| kanlai 发表于 2021-1-4 13:24
漁滒 发表于 2021-1-4 13:06
[mw_shl_code=python,true]    data = 38625
    print(bin(data))  # 0b1001011011100001
    data2 = ( ...

py不会    需要C++的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-16 16:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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