Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何转换像e+;308(以10为基数)转换为具有等效大小的十六进制数?_C++_Find_Hex_Decimal_Exponent - Fatal编程技术网

C++ 如何转换像e+;308(以10为基数)转换为具有等效大小的十六进制数?

C++ 如何转换像e+;308(以10为基数)转换为具有等效大小的十六进制数?,c++,find,hex,decimal,exponent,C++,Find,Hex,Decimal,Exponent,比如说,我有数字0.1e+308。如何获取指数308(以10为基数),并以十六进制(以16为基数)找到正确的指数 我的意思不是简单地把308转换成十六进制那很容易!我想找到e308的等效十六进制数 我需要这个,因为我有一个例程,可以在一个数字的末尾添加正确数量的零。我使用十进制(以10为基数),但我的例程需要太长时间(约20秒)才能找到答案 但是,如果我使用十六进制,我可以在不到一秒钟内找到结果。因为将基数16转换为二进制非常快 我正在计算的数字相当大,所以请考虑像BigInteger这样的东西

比如说,我有数字0.1e+308。如何获取指数308(以10为基数),并以十六进制(以16为基数)找到正确的指数

我的意思不是简单地把308转换成十六进制那很容易!我想找到e308的等效十六进制数

我需要这个,因为我有一个例程,可以在一个数字的末尾添加正确数量的零。我使用十进制(以10为基数),但我的例程需要太长时间(约20秒)才能找到答案

但是,如果我使用十六进制,我可以在不到一秒钟内找到结果。因为将基数16转换为二进制非常快

我正在计算的数字相当大,所以请考虑像BigInteger这样的东西。但是我用C++来编码。< /P> 编辑1

这是我将十进制字符串转换为二进制位数组的例程

case 10:
    bitsSum = bits_duplicate(bitsDst);
    if (bitsSum == NULL)
        goto error;
    bitsTen = bits_create_value(maxBits, 10);
    if (bitsTen == NULL)
        goto error;
    int len = str_chars_length(strDup);
    char c;
    for (i = 0; i < len; i++) {
        c = strDup[i] - '0';
        if (c == 0)
            continue;
        if (bits_set(bitsSum, c) == 0)
            goto error;
        for (k = 0; k < len - i - 1; k++) {
            if (bits_multiply(bitsTen, bitsSum) == 0)
                goto error;
        }
        if (bits_add(bitsSum, bitsDst) == 0)
            goto error;
    }
    break;
案例10:
bitsSum=重复位(bitsDst);
if(bitsSum==NULL)
转到错误;
bitsTen=位\创建\值(最大位,10);
if(bitsTen==NULL)
转到错误;
int len=str_chars_长度(strDup);
字符c;
对于(i=0;i
您可以清楚地看到,将中的字符串值转换为等效的二进制数组很慢,因为它需要乘法和加法

但我将十六进制字符串转换为二进制位数组的例程非常快:

        d = ((strDup[i] >= '0' && strDup[i] <= '9') ? strDup[i] - '0' : (strDup[i] >= 'a' && strDup[i] <= 'f') ? strDup[i] - 'a' + 10 : strDup[i] - 'A' + 10);
        bitsDst->bitArray[k++] = (d & 1) ? 1 : 0;
        bitsDst->bitArray[k++] = (d & 2) ? 1 : 0;
        bitsDst->bitArray[k++] = (d & 4) ? 1 : 0;
        bitsDst->bitArray[k++] = (d & 8) ? 1 : 0;
d=((strDup[i]>='0'和&strDup[i]='a'和&strDup[i]位数组[k++]=(d&1)?1:0;
bitsDst->bitArray[k++]=(d&2)?1:0;
bitsDst->bitArray[k++]=(d&4)?1:0;
bitsDst->bitArray[k++]=(d&8)?1:0;
0.1e+308=10^307

Log10(10^307)=307


Log16(10^307)=Log10(10^307)/Log10(16)=307/Log10(16)

你可以用代码或<代码> python < /C>代替它吗?或者你必须使用C++吗?我可以使用C或C++,或者如果你有其他语言的例子,我确信我可以自己转换它。这个问题完全不清楚。你能把慢速十进制函数张贴出来吗?这样我们就可以理解你在做什么。你的解释说你已经尝试使用十进制数,但是想要使用十六进制数。所有的数字都是二进制的。你使用字符串吗?你的数据是如何格式化的?我在十进制中有一个指数,我想要等价的指数,但是在十六进制。我会看看我是否能张贴一些代码。你不能。考虑数字0.1E1和0.15E2。它们有一个。十进制指数1和2,尽管它们的十六进制表示法都有十六进制指数1。谢谢!我想这就是我想要的答案。