在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?
我必须实现一个定义8位字数据的协议,首先从最低有效位(LSB)开始.我想用这个数据来实现这个数据unsigned char,但是我不知道在C/C++中LSB和最高有效位(MSB)的位顺序是什么,可能需要交换位.
任何人都可以解释我如何找出unsigned char编码:MSB-LSB或LSB-MSB?
例:
unsigned char b = 1;
MSB-LSB: 0000 0001
LSB-MSB: 1000 0000
我之前提出的问题是从未得到过回复,但我现在有更具体的内容,所以希望你能提供帮助.
基本上,SendKeys库似乎只能在我的32位Windows系统上安装...
所以我想知道是否有一种方法可以实现,所以我要编写的这个函数只能在32位系统上执行?我意识到有一个platform.architecture()方法来检查当前系统,但它返回字符串"('64bit','WindowsPE')".
我想知道是否有办法读取此字符串的64位部分,以使此功能正常工作.
例如,伪代码:
checker = platform.architecture()
system = strip or read 64 bit from checker string somehow
if system == 64 bit
then warn system is 64 bit and won't run function
else run function
Run Code Online (Sandbox Code Playgroud)
沿着那条线.除非有更简单的方法检查它 - 可能与使用的Python版本(即32或64位)
希望我已经正确地理解了这一点 - 我对编程仍然很陌生.:)
我想使用Lua将大型二进制文件(大小为1mb)读入内存.目标设备是移动的,所以我非常希望最小化内存占用.
从网上快速看看,似乎Lua tabels将为每个连续整数索引(键)使用16B加上存储该值的空间,因为我存储二进制数据希望只使用2位但只能说1个字节.
1e6记录将是1e6*17 = ~17mB - 这是巨大的!
从我的简短阅读看来,我似乎可以userdata用来实现我想要的任何东西.我之前没有使用过C但看起来它会用到
1b*1e6 = 125kB
我应该这样做,还是我有一些非常错误/有更简单的方法来做到这一点.
任何建议甚至是蹩脚计算的名字都非常欢迎:)
编辑:下面有一些有趣的答案关于将数据存储在字符串中(谢谢!)和使用按位操作.我刚刚在PIL书(第3版pg293)中找到了一个例子,它比较了C中存储的布尔数组,因此他们使用了3%的内存.虽然这很酷且有用,但对我来说可能有点过分,因为下面的解决方案表明我可以装入1MB,这对我来说很好.
编辑:遇到这个C blob impl
编辑:解决方案 - 我按照建议将文件内容读入字符串,因为我使用5.1必须使用第三方位操作 - 我使用纯Lua实现LuaBit.感谢大家!!
我目前正在研究一些网络代码(这是我的第一个服务器)并且有一个关于优化特定函数的快速问题,该函数将值写为位然后将它们打包成一个字节.优化此功能的原因是因为每个服务器标记使用数千次来将数据打包发送到多个客户端.
示例可以更好地用于解释函数试图完成的内容:值3可以由两位表示.在二进制中,它看起来像00000011.该函数会将此二进制值转换为11000000.当再次调用该函数时,它将知道从第3个最高有效位(右边的第3个/第13个)开始,并在当前字节中最多写入6位.如果那时剩下的位要写,它将从一个新字节开始.
这样做的目的是节省空间,如果有多个值可以小于byte.
我目前的功能如下:
private ByteBuffer out = ByteBuffer.allocate(1024);
private int bitIndex = 0;
/*
* Value: The value to write
* Amount: The number of bits to represent the value in.
*/
public OutputBuffer writeBits(long value, int amount) {
if (bitIndex != 0) {
int remainingBits = 8 - bitIndex;
int bytePos = out.position() - 1;
byte current = out.get(bytePos);
int shiftAmount = amount - remainingBits;
int bitsWritten = amount < remainingBits ? amount : …Run Code Online (Sandbox Code Playgroud) 考虑一个具有许多bool属性的类
class A
{
bool a;
bool b;
bool c;
bool d;
bool e;
bool f;
};
Run Code Online (Sandbox Code Playgroud)
虽然每个bool对象可以用一个位表示,但这里每个属性都需要一个字节(如果我没有记错的话).该对象将占用6个字节而不是仅仅1个字节(其中将实际使用6个字节).原因是位不可寻址,只有字节.
为了使存储器稍微冷凝,可以使用a vector<bool>或a bitset然后通过它们的索引访问属性.例如,可以将get函数编写为
bool A::get_d() {data[3];}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够直接访问属性InstanceOfA.d.是否可以这样做,同时确保我的所有6个bool都在同一个字节内被压缩?
我有一组位串:({'0011', '1100', '1110'}一组中的所有位串都具有相同的长度)。
我想快速找到与集合最大相似度最小的相同长度的位串。最大相似度可以这样计算:
def max_similarity(bitstring, set):
max = 0
for item in set:
temp = 0
for i in range(len(bitstring)):
if bitstring[i] == item[i]:
temp += 1
if temp > max:
max = temp
return max
Run Code Online (Sandbox Code Playgroud)
我知道我可以遍历该长度的所有可能的位串,计算每个位的最大相似度,最后保留这些迭代中的最小者。但这解决了O(2 ^ n)中的问题。我想知道是否有人看到任何更快的选择。
我一直在玩Pythons XOR:
def int2bin(integer, digits):
if integer >= 0:
return bin(integer)[2:].zfill(digits)
else:
return bin(2**digits + integer)[2:]
def XOR(bitset):
intset = [int('{}'.format(bitstring), 2) for bitstring in bitset]
digits = len(bitset.pop())
if len(intset) == 1:
return int2bin(~intset.pop(), digits)
else:
curr …Run Code Online (Sandbox Code Playgroud) uint64_t n; // two 32-bit integers
return ( (uint32_t)(n >> 32) == (uint32_t)n );
Run Code Online (Sandbox Code Playgroud)
将32个最高有效位与uint64_t的32个最低有效位进行原子比较的最快方法是什么?
我认为一个可怕的解决方案是:获取自旋锁,读取32 LSB,读取32 MSB,比较得到结果,释放自旋锁,返回结果.有没有办法做到这一点,而不必采取螺旋锁?
我正在从SQL Server转换到MySQL 5.1,似乎试图使用select语句创建一个表,以便列有点.
理想情况下,以下方法可行:
CREATE TABLE myNewTable AS
SELECT cast(myIntThatIsZeroOrOne as bit) AS myBit
FROM myOldtable
Run Code Online (Sandbox Code Playgroud)
然而sql对于转换非常不满意.我怎么能告诉它选择一个int列(我知道只有0和1)作为一个位?
bit ×10
c ×5
byte ×2
c++ ×2
python ×2
32bit-64bit ×1
architecture ×1
atomic ×1
boolean ×1
bytebuffer ×1
caching ×1
casting ×1
java ×1
long-integer ×1
long-long ×1
lua ×1
memory ×1
mysql ×1
mysql-5.1 ×1
networking ×1
python-3.x ×1
search ×1