标签: bits

为什么不用更大的确定性类型实现BitSet?

这里的Java引用表明布尔类型虽然用"位"信息表示,但没有精确定义的大小.相比之下,其他类型似乎表明大小是定义的.例如,int是32位,故事结束.

当我们查看BitSet的规范时,我们可以看到它由布尔值组成.通过上面的参考,这似乎表明BitSet的"大小" 是未定义的 - 毕竟它由布尔值组成.果然,文档指定:

请注意,大小与位集的实现有关,因此它可能随实现而改变.

所以我的问题是,为什么不使用精确定义的另一种数据类型实现BitSet呢?例如,如果我们使用一个字节,我们可以保证8位的大小,我们不会觉得大小可能不是我们认为的大小.确实,大小必须能够被8整除,但至少它看起来更具有尺寸确定性.

如果我们的系统绝对不能超过某个内存容量,那么在大小方面实现精确的BitSet实现似乎很有用.

java bits bitsets primitive-types bitset

0
推荐指数
1
解决办法
545
查看次数

如何将两位添加到十六进制中

我有两个字节,我设置不同的位,以获得不同的组合.例如,字节1位7和字节2位1,位2使组合设备准备就绪.现在,我创造了面具

#define C1_device_ready   (0x80 | 0x100 | 0x200)
Run Code Online (Sandbox Code Playgroud)

然后我读取数据并尝试比较.我可以做1个字节(data [0]&mask == mask).但是如何计算C1_device_ready掩码,其中有两个字节,data [0]和data [1].是否可以轻松实现,或者我应该仅在单字节中进行屏蔽.:: added :: data是unsigned char数据[2]

c c++ hex bits

0
推荐指数
1
解决办法
437
查看次数

Java VS C#中的intBitsToFloat方法?

在C#中将位转换为float时,我输入的数字错误.

我们用这个位吧 number= 1065324597

Java中,如果我想从bit转换为float,我会使用intBitsToFloat方法

int  intbits= 1065324597;
System.out.println(Float.intBitsToFloat(intbits));
Run Code Online (Sandbox Code Playgroud)

输出:0.9982942正确的输出我想在C#中获得


但是,在C#中我使用过

int  intbits= 1065324597;
Console.WriteLine((float)intbits);
Run Code Online (Sandbox Code Playgroud)

输出:1.065325E+09 错!

我的问题是你如何在C#中转换inbitsToFloat?

我的尝试: 我查看了这里的文档http://msdn.microsoft.com/en-us/library/aa987800(v=vs.80).aspx 但我仍然有同样的麻烦

c# java floating-point bits

0
推荐指数
1
解决办法
1715
查看次数

从双重转换为单一

给定64位代表IEEE 754双精度格式的数字,将它们转换为32位的算法是什么,它们代表相同的数字,但是采用IEEE 754单精度格式(可能会丢失精度)?

此外,有没有一种简单的方法在Ada中执行此转换,而无需操作位?

floating-point double bits ada ieee-754

0
推荐指数
1
解决办法
479
查看次数

两个16位数的乘法 - 为什么结果是32位长?

如果我将两个16位数相乘,结果将是32位长.但为什么会这样呢?这有什么明确的解释?

并且为了正确理解:对此的计算是:n位数乘以m位数给出(n + m)位数?

binary assembly bits multiplication integer-arithmetic

0
推荐指数
1
解决办法
2911
查看次数

将unsigned char字节打包成c中的unsigned int

我有一个赋值,我必须将4个unsigned char中的字节打包成unsigned int.

代码如下:

#include <stdio.h>

int main (){
    //Given this
    unsigned char a = 202; 
    unsigned char b = 254; 
    unsigned char c = 186; 
    unsigned char d = 190; 

    //Did this myself
    unsigned int u = a; 
    u <<=8; 
    u |= b; 
    u <<=8; 
    u |= c
    u <<=8; 
    U |= d; 
}
Run Code Online (Sandbox Code Playgroud)

我知道:

u <<=8; 
Run Code Online (Sandbox Code Playgroud)

将你的位向左移动8.但我对这些线条的作用感到困惑u |= b;

简单地说,我试图更好地理解我所编写的代码将4个unsigned char中的字节打包成unsigned int.我以粗野的方式提出了这个解决方案.我只是试图以不同的方式打包字节,这种方式有效.但我不确定为什么.

先感谢您.

c bits bit-shift pack

0
推荐指数
1
解决办法
5440
查看次数

C中的左移位操作

我试图移动值为1111的变量'a'并将其移到左边,这样我就可以得到1110意味着它应该打印数字14.然而,它是打印30.我想是因为它是移位,但它没有最左边的位(11110),但它应该是1110.这是我的代码.谢谢.

int main(int argc, char *argv[]) {
unsigned a;
a=0xF;
a=a<<1; 
printf(": %u\n",a);
Run Code Online (Sandbox Code Playgroud)

c bits

0
推荐指数
1
解决办法
1172
查看次数

Unicode的位串

我有一串比特,像这样string str = "0111001101101000"是字母"sh".
我需要用它来制作Unicode字母.我正在做以下事情:

BitArray bn = new BitArray(str.Length); //creating new bitarray
for (int kat = 0; kat < str.Length; kat++)
{
    if (str[kat].ToString() == "0")//adding boolean values into array
    {
        bn[kat] = false;
    }
    else
        bn[kat] = true;
}

byte[] bytes = new byte[bn.Length];//converting to bytes
bn.CopyTo(bytes, 0);
string output = Encoding.Unicode.GetString(bytes); //encoding                          

textBox2.Text = output; // result in textbox
Run Code Online (Sandbox Code Playgroud)

但输出文本只是完全混乱.怎么做对了?

c# string unicode bits

0
推荐指数
1
解决办法
113
查看次数

访问MIPS中的各个位

我正在用MIPS编写一个使用左手规则算法解决迷宫的程序.我已经编写了算法,但是我需要找到一种方法来跟踪我已经访问过的迷宫中的空间,以便找到解决迷宫的"最佳"和最直接的解决方案.

在程序中,寄存器$ t9是一个32位数字,用于存储有关穿过迷宫的汽车位置的信息,包括列和行位置,这是我需要隔离的.基本上,我需要知道的是如何使用/隔离那些特定的位.

位31-24是一个8位数字,表示2的恭维中的行位23-16是一个8位数字,表示2的恭维中的列

tl; dr我只需要从MIPS中的$ t9中的32位数字中提取前8位和下一位8位

谢谢!

algorithm assembly bits maze mips

0
推荐指数
1
解决办法
1222
查看次数

联盟和内存管理

我在接受采访时给了我以下代码: -

union mix
{
    int i;
    char c[2];
};

int main()
{
    union mix key;
    key.i=512;
    printf("\n %d,%d,%d",key.i,key.c[0],key.c[1]);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

当我回到家并在系统上运行时,我得到了输出: - 512,0,2.

任何人都可以向我解释它是如何工作的或为什么c [1] = 2

编辑: - 我所知道的是它与内存中的位存储有关.

c bits unions

0
推荐指数
1
解决办法
107
查看次数