我希望有一个数据类型存储一个21位长的二进制数,我可以对其进行操作。我试过了
unsigned long long int
它只是勉强小。这是浪费了很多空间bc我的数字是二进制的,计算机存储它是一个整数所以问题是有一种类型将它存储为二进制数,但我仍然可以像它上面的模块化操作。
我阅读了一些相关的帖子,并不认为他们完全解决了我的问题。如果有一个我错过了我会感谢有人指点我在那里谢谢。
更新所以听到的是代码的片段
之后崩溃了
unsigned long long int a;
cin>>a;
哪个必须去
void convertNumtoArray(unsigned long long int a, x & binaryA){
int j=0;
while(a!=0){
unsigned long long int remainder=a % 10;
a=a/10;
binaryA.a[j]=remainder;
binaryA.length_a=j+1;
j++;
}
}
答案 0 :(得分:2)
我希望有一个数据类型存储一个21位长的二进制数,我可以对其进行操作。
解决这个问题的一种方法是使用bitset
,以下是构建和使用此类对象的示例:
#include <iostream>
#include <string>
#include <bitset>
int main ()
{
std::bitset<16> foo;
std::bitset<16> bar (0xfa2);
std::bitset<16> baz (std::string("0101111001"));
std::cout << "foo: " << foo << '\n';
std::cout << "bar: " << bar << '\n';
std::cout << "baz: " << baz << '\n';
}
以上版画:
foo: 0000000000000000
bar: 0000111110100010
baz: 0000000101111001
这使您可以直接访问要定义的变量的大小(在您的情况下为21位?),以位为单位,以及二进制操作的可能性。
答案 1 :(得分:1)
unsigned long long int remainder=a % 10;
a=a/10;
您将除以10,这意味着您将该值视为十进制数字。 (常量10
是十进制,而不是二进制。)21个十进制数相当于大约70位,这就是unsigned long long int
(通常为64位)不够宽的原因。
将10
更改为2
。 (我没有检查代码中的其他问题,但这是一个开始。)
(您也可以考虑使用按位运算符,但2
除以现在应该可以工作,现在可能更容易理解。)