生成十进制到二进制的错误
Error generating decimal to binary
我正在写一个程序来获得一个数字的二进制表示。我写了这段代码。
#include <iostream>
using namespace std;
int main() {
int n, count = 0;;
int* br = new int();
cin >> n;
while (n>0) {
if (n % 2)
br[count] = 1;
else
br[count] = 0;
n /= 2;
count++;
}
cout << count << endl;
for (int i = count - 1; i >= 0; i--) {
cout << br[i];
}
return 0;
}
当我运行上面的程序时,我得到这个错误
Program received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffe8995a2dc in ntdll!RtlpNtMakeTemporaryKey () from C:WindowsSYSTEM32ntdll.dll
Single stepping until exit from function ntdll!RtlpNtMakeTemporaryKey,
which has no line number information.
gdb: unknown target exception 0xc0000374 at 0x7ffe8995a31c
Program received signal ?, Unknown signal.
0x00007ffe8995a31c in ntdll!RtlpNtMakeTemporaryKey () from C:WindowsSYSTEM32ntdll.dll
Single stepping until exit from function ntdll!RtlpNtMakeTemporaryKey,
which has no line number information.
[Inferior 1 (process 6368) exited with code 0377]
可能的原因是什么?我是c++新手
应该使用整型数组来保存单个位。现在你的代码正在创建一个动态int:
int* br = new int();
由于int型的大小在不同的实现中是不同的,一种可移植的方法是:
#include<climits>
.....
int* br = new int[sizeof(int)*CHAR_BIT];
CHAR_BIT是一个常量,表示char对象的位数(byte)。Sizeof (int)是int类型的字符数(字节数)。两者相乘就得到整型数的位数。
虽然你并不需要动态内存。使用堆栈内存要简单得多,也更合适:
#include<climits>
.....
int br[sizeof(int)*CHAR_BIT];
前面的解决方案有一个共同的问题。它们都使用整型来存储单个比特。这意味着浪费了超过90%的存储空间。这个问题对于这样一个简单的例子来说是微不足道的,但在更大的项目中可能会成为现实。Std::bitset是一种很好的改进方法:
bitset存储位(只有两个可能值:0或1的元素);真或假,…)。
该类模拟bool元素数组,但针对空间进行了优化分配:一般来说,每个元素只占用一个位(其中,on)大多数系统,比最小元素类型小8倍;字符).
#include<climits>
#include<bitset>
.....
bitset<sizeof(int)*CHAR_BIT> br;
std::bitset是如此巧妙的设计,你只需要改变br
的声明,它将工作,不需要改变其余的代码。
指令
int* br = new int();
只分配一个整数。您应该分配至少与要转换的数据一样多的位(32?64 ?)。我认为你最好使用静态数组,所以
int br[64] ;
相关文章:
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 错误 C2679 二进制"<<":未找到采用类型为 'T' 的右侧操作数的运算符
- 错误含义;以二进制形式打印数字
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- -bash:/a.out:无法执行二进制文件:Exec格式错误
- 程序错误地读取了二进制文件的一个字节
- 输入 1024 后十进制到二进制转换的输出错误?
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 错误:C2679 二进制"==":未找到采用类型 'const std::string' 的右侧操作数的运算符(或者没有可接受的转换)
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 为模板类编写二进制加法运算符. 编译错误
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- 提升multi_index示例:错误:二进制表达式的操作数无效
- 错误:二进制表达式的操作数无效
- 收到错误"二进制'[':"const typ"未定义此运算符"或"下标需要数组或指针类型