这里的Java引用表明布尔类型虽然用"位"信息表示,但没有精确定义的大小.相比之下,其他类型似乎表明大小是定义的.例如,int是32位,故事结束.
当我们查看BitSet的规范时,我们可以看到它由布尔值组成.通过上面的参考,这似乎表明BitSet的"大小" 是未定义的 - 毕竟它由布尔值组成.果然,文档指定:
请注意,大小与位集的实现有关,因此它可能随实现而改变.
所以我的问题是,为什么不使用精确定义的另一种数据类型实现BitSet呢?例如,如果我们使用一个字节,我们可以保证8位的大小,我们不会觉得大小可能不是我们认为的大小.确实,大小必须能够被8整除,但至少它看起来更具有尺寸确定性.
如果我们的系统绝对不能超过某个内存容量,那么在大小方面实现精确的BitSet实现似乎很有用.
我有两个字节,我设置不同的位,以获得不同的组合.例如,字节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#中将位转换为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 但我仍然有同样的麻烦
给定64位代表IEEE 754双精度格式的数字,将它们转换为32位的算法是什么,它们代表相同的数字,但是采用IEEE 754单精度格式(可能会丢失精度)?
此外,有没有一种简单的方法在Ada中执行此转换,而无需操作位?
如果我将两个16位数相乘,结果将是32位长.但为什么会这样呢?这有什么明确的解释?
并且为了正确理解:对此的计算是:n位数乘以m位数给出(n + m)位数?
我有一个赋值,我必须将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.我以粗野的方式提出了这个解决方案.我只是试图以不同的方式打包字节,这种方式有效.但我不确定为什么.
先感谢您.
我试图移动值为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) 我有一串比特,像这样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)
但输出文本只是完全混乱.怎么做对了?
我正在用MIPS编写一个使用左手规则算法解决迷宫的程序.我已经编写了算法,但是我需要找到一种方法来跟踪我已经访问过的迷宫中的空间,以便找到解决迷宫的"最佳"和最直接的解决方案.
在程序中,寄存器$ t9是一个32位数字,用于存储有关穿过迷宫的汽车位置的信息,包括列和行位置,这是我需要隔离的.基本上,我需要知道的是如何使用/隔离那些特定的位.
位31-24是一个8位数字,表示2的恭维中的行位23-16是一个8位数字,表示2的恭维中的列
tl; dr我只需要从MIPS中的$ t9中的32位数字中提取前8位和下一位8位
谢谢!
我在接受采访时给了我以下代码: -
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?
编辑: - 我所知道的是它与内存中的位存储有关.