Matlab Bitget如何处理大输入?

Matlab Bitget如何处理大输入?,matlab,bit,sparse-matrix,Matlab,Bit,Sparse Matrix,默认类型为uint64,但下面的类型显然需要更大的支持,您可以看到上面的bitget命令不支持数字536870915(1000000000000000000011,二进制,30位长度)。所以 如何让bitget命令与下面这样的大输入一起工作? 输入 hhhh=sparse([],[],[],2^40+1,1); hhhh(536870915)=1; bitget(str2num(dec2bin(find(hhhh)-1)),2,'uint64') Error using bitget Do

默认类型为
uint64
,但下面的类型显然需要更大的支持,您可以看到上面的bitget命令不支持数字
536870915
(1000000000000000000011,二进制,30位长度)。所以

如何让bitget命令与下面这样的大输入一起工作?

输入

hhhh=sparse([],[],[],2^40+1,1); 
hhhh(536870915)=1; 
bitget(str2num(dec2bin(find(hhhh)-1)),2,'uint64')
Error using bitget
Double inputs must have integer values in the range of ASSUMEDTYPE.
输出

hhhh=sparse([],[],[],2^40+1,1); 
hhhh(536870915)=1; 
bitget(str2num(dec2bin(find(hhhh)-1)),2,'uint64')
Error using bitget
Double inputs must have integer values in the range of ASSUMEDTYPE.

dec2bin(find(hhhh)-1)
的输出传递给
str2num
。这将直接将1和0字符串转换为双精度:
9.9999999999999e+28
。我猜那不是你想要的

如果您只是想获取
536870915
的第二位,为什么不使用:

bitget(find(hhhh)-1,2,'uint64')
另一方面,我认为您也可以使用它(可能速度较慢,但如果您已经转换为字符串表示形式,那么它可能适用于代码的其余部分):


似乎您正在尝试将两种方法结合起来。

这里的参数yo
bitget
不是536870915;大约10点^29@LuisMendo我无法理解,我是否做了错误的转换?可能只是
bitget(find(hhh)-1,2)
(或者
bitget(find(hhh)-1,2,'uint64')
)?str2num(dec2bin(find(hhh)-1)的结果是一个数字,其十进制表示形式仅包含1和0。@hhh:在matlab中不能更改双精度/整数变量的基数。matlab始终使用基数2,但显示基数10。尝试
bitget
对于一些小值,您会注意到它是如何工作的。是的,但在哪里指定基数?bitget是否以d为基数2efault?@hhh,顾名思义,它得到的是位。这意味着基数2:-)@hhh:你不能指定这个
bitget
正在处理用于表示值的底层二进制数据(如@A.Donda所说)。设置
ASSUMEDTYPE
仅将值强制转换为另一个整数类型–保留值,但上溢/下溢情况除外。默认情况下,双精度(仅允许整数值)会自然映射到
unint64