小编Gam*_*lda的帖子

如何在Javascript中将浮点数转换为二进制表示(IEEE 754)?

在Javascript中将浮点数转换为二进制表示形式的最简单方法是什么?(例如1.0 - > 0x3F800000).

我试图手动完成,这在一定程度上(通常的数字)起作用,但是对于非常大或非常小的数字(没有范围检查)和特殊情况(NaN,无穷大等)都会失败:

function floatToNumber(flt)
{
    var sign = (flt < 0) ? 1 : 0;
    flt = Math.abs(flt);
    var exponent = Math.floor(Math.log(flt) / Math.LN2);
    var mantissa = flt / Math.pow(2, exponent);

    return (sign << 31) | ((exponent + 127) << 23) | ((mantissa * Math.pow(2, 23)) & 0x7FFFFF);
}
Run Code Online (Sandbox Code Playgroud)

我重新发明轮子了吗?

编辑:我改进了我的版本,现在它处理特殊情况.

function assembleFloat(sign, exponent, mantissa)
{
    return (sign << 31) | (exponent << 23) | (mantissa);
}

function floatToNumber(flt)
{
    if (isNaN(flt)) // Special case: NaN
        return …
Run Code Online (Sandbox Code Playgroud)

javascript floating-point binary ieee-754

21
推荐指数
2
解决办法
8774
查看次数

从集合中删除重复的 byte[]

这可能是一个非常简单的问题。我只是想从集合中删除重复的 byte[] 。

由于默认行为是比较引用,因此我认为创建 IEqualityComparer 会起作用,但事实并非如此。

我尝试过使用 HashSet 和 LINQ 的 Distinct()。

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;

namespace cstest
{
    class Program
    {
        static void Main(string[] args)
        {
            var l = new List<byte[]>();
            l.Add(new byte[] { 5, 6, 7 });
            l.Add(new byte[] { 5, 6, 7 });
            Console.WriteLine(l.Distinct(new ByteArrayEqualityComparer()).Count());
            Console.ReadKey();
        }
    }

    class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
    {
        public bool Equals(byte[] x, byte[] y)
        {
            return x.SequenceEqual(y);
        }

        public int GetHashCode(byte[] obj)
        {
            return obj.GetHashCode();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出: …

c# distinct duplicates hashset iequalitycomparer

3
推荐指数
1
解决办法
2266
查看次数