我已经看到了关于计算insert type of输入中设置位数的众多问题,但为什么它有用呢?
对于那些寻找有关位计数的算法的人,请看这里:
language-agnostic computer-science bits bit-manipulation bitcount
我有一个函数,我相信将int转换为浮点值,拆分为值的符号指数和分数组成部分.使用IEEE 754表示浮点值.
unsigned test(unsigned x) {
// split the given bits of sign exponent and fraction, combine to return
unsigned int sign = (x & 0x80000000) >> 31;
unsigned int expo = (x & 0x7F800000) >> 23;
unsigned int frac = (x & 0x007fffff);
return (sign << 31) | (expo << 23) | frac;
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何从这个浮点表示计算减半或加倍的值.
unsigned doubled(unsigned x) {
// get float
// float = unsigned int to float
// doubleFloat = 2*f
// if float is not a …Run Code Online (Sandbox Code Playgroud) 我完全理解如何移位。我已经在纸上和代码中完成了许多示例,并且不需要任何帮助。
我正在尝试提出一些有关如何使用位移的真实示例。以下是我能想到的一些例子:
也许我能概念化的最重要的例子与字节序有关。在大端系统中,最低有效位从左侧存储,而在小端系统中,最低有效位从右侧存储。我想对于使用相反字节序策略的系统之间的文件和网络传输,必须进行某些转换。
在处理任何 n^2、n^4 等乘法时,编译器和处理器似乎可以进行某些优化。这些位只是向左移动。(相反,我想同样适用于除法、n/2、n/4 等)
在加密算法中。即使用一系列位移、反转和组合来混淆某些东西。
所有这些都是准确的例子吗?你有什么要补充的吗?我花了很多时间学习如何实现位移/重新排序/字节交换,我想知道如何实际应用它 = )
我正在尝试学习汇编(更像是在挣扎),并且遇到了字节、字、双字等数据类型。
真正让我困惑的是你什么时候知道使用一个而不是另一个。显然您想使用最保守的选项,但我怎么知道选择一个字节而不是一个字呢?例如 1 个字 = 16 位或 2 个字节。这是否意味着我可以在 1 个单词中放入 16 个字符?所以为了保存字母表,我需要声明 2 个单词?
寄存器(16 位、32 位和 64 位)也是如此。我知道您可以使用较小的寄存器,例如al和 ,ah而不是eax在操作较小尺寸的数据时。对于 16 位寄存器,您能否将比字大的数据类型移入其中,因为它是 16 位,因此可以容纳 16 位字?
围绕这整个概念我很困难。如果有人碰巧有我可以查看的任何好的资源或信息,那就太好了。干杯!
如何在Java中将字符串转换为位(不是字节)或位数组(我稍后会做一些操作)以及如何转换为整数数组(每32位转换成int然后将它放入数组中?我有从未在Java中进行过这种转换.
String->array of bits->(some operations I'll handle them)->array of ints
Run Code Online (Sandbox Code Playgroud) 我需要存储一个动态的位数组.
vector <bool>上的C++参考页面包含以下信息:
存储不一定是
bool值的数组,但库实现可以优化存储,以便每个值存储在单个位中.
我如何确保我使用的程序vector<bool>确实存储了向量中的位而不是布尔值(字节)?
我使用delphi逐字节地从.txt文件中提取数据.对于每个字节,我需要交换该字节的开始和结束位.我一直在谷歌搜索几个小时但我找不到有关在delphi中操作字节变量内的位的任何参考.有任何想法吗?
我正在关注Gameboy模拟的指南,在一段代码中我看到了以下内容:
while(true)
{
var op = MMU.rb(Z80._r.pc++); // Fetch instruction
Z80._map[op](); // Dispatch
Z80._r.pc &= 65535; // Mask PC to 16 bits
Z80._clock.m += Z80._r.m; // Add time to CPU clock
Z80._clock.t += Z80._r.t;
}
Run Code Online (Sandbox Code Playgroud)
如果pc是一个16位程序计数器寄存器并且65535是十六进制的0xFFFF,那么屏蔽16位值的目的是什么0xFFFF?据我所知,这什么都没做?或者它与符号位有关吗?
我正在寻找一种有效的方法来如何轻松地将其转换BitSet为二进制字符串.让我们说它的通常长度将是数千位.
例如,让我们:
BitSet bits = new BitSet(8);
bits.set(1);
bits.set(3);
Run Code Online (Sandbox Code Playgroud)
这是理想的结果:
String result = toBinaryString(bits);
// expected: result = "01010000"
Run Code Online (Sandbox Code Playgroud)
我总体上有一些想法(溪流等),但可能有一些明显的标准方法,我只是缺少.
在过去的几周里,我一直致力于制定一个能够使主要螺旋尽可能高效的程序.我研究了多线程以提高程序的速度,现在我遇到了一个新问题.我的素数列表的长度为6400万和零,这个列表占用240MB的内存.因为我使用多处理(总共5个进程),我的脚本最多使用总共1.1GB的ram,如果达到这一点,则返回内存错误.
关于我如何存储素数的一些背景信息:质数存储在列表中,每次我找到素数时,我将值设置为1(例如:Primes [13] = 1(因为它是素数)和Primes [14] = 0).对我来说这似乎是最好的解决方案,因为列表不会占用大量内存
经过一些基本的数学计算后,我得出结论,我的素数列表中的每个零或一个占用4个字节(32位)的信息.这似乎是合乎逻辑的,但我想知道是否有办法将零和1存储为单个位,因此它不会占用太多内存.
提前感谢任何答案,问候,伤害