在使用Project Euler问题时,我经常需要大型(> 10**7)位数组.
我的正常方法是:
bool* sieve = new bool[N];
bool sieve[N];
Run Code Online (Sandbox Code Playgroud)
当N = 1,000,000时,我的程序使用1兆字节(8*1,000,000位).
在c ++中使用存储位数组是否比bool更有效?
任何人都可以告诉我如何使Xvfb工作在32位颜色?例如,Vnc4server工作正常,但不适合我的目的.
> /etc/X11# Xvfb :1 -screen 0 1600x1200x24
error opening security policy file /etc/X11/xserver/SecurityPolicy
(EE) XKB: Couldn't open rules file /usr/share/X11/xkb/rules/base
Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
[config/hal] couldn't initialise context: (null) ((null))
FreeFontPath: FPE "/usr/share/fonts/X11/misc" refcount is 2, should be 1; fixing.
Run Code Online (Sandbox Code Playgroud)
阿卡 - 它有效,同时:
> /etc/X11# Xvfb :1 -screen 0 1600x1200x32
Fatal server error:
Couldn't add screen 0
Run Code Online (Sandbox Code Playgroud) 我需要在C中提取short数据类型的特定部分(没有位).
例如,我的二进制52504为11001101000 11000,我想要前6(FROM LSB - > MSB即011000十进制24)位和其余10位(11001101000十进制820).
类似地,我希望这个函数过于通用,不能提取给定"start"和"end"的特定位数(即位块等效于一些十进制值).
我检查了其他帖子,但那些没有帮助,因为给定的功能没有太多的概括.
我需要一些可以用于shortC数据类型的东西.
我有2048字节的短数组.每个像素为10位.所以我的16位组成每个字节占用一些时间2像素数据,有时3像素数据.
喜欢
(PIXEL:0,1)10 BITS + 6 BITS
然后(PIXEL:1,2,3)4 BITS(剩余第1个像素位)+ 10个BITS + 2个BITS.
等等..这个模式继续......所以,我想要提取每个像素并制作一个整个数组,让每个像素被占用在整个字节(16位)上,如... 1字节应该包含1 DATA PIXEL,另一个BYTE应该包含整个16位的其他PIXEL值,依此类推.
在以整数时间复杂度读取Bits计数算法(Brian Kernighan)之后,直接遵循此问题.有问题的Java代码是
int count_set_bits(int n) {
int count = 0;
while(n != 0) {
n &= (n-1);
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
我想了解n &= (n-1)这里取得了什么成果?我在另一个漂亮的算法中看到了类似的构造,用于检测数字是否是2的幂,如:
if(n & (n-1) == 0) {
System.out.println("The number is a power of 2");
}
Run Code Online (Sandbox Code Playgroud) 我在python中读取二进制文件,文件格式的文档说:
标志(二进制)含义
1 nnn nnnn表示要跟随一个要复制的数据字节nnn nnnn(最多127次).
0 nnn nnnn表示要跟随nnnnnnn字节的图像数据(最多127个字节),并且没有重复.
n 000 0000终点字段.表示行记录的结束.n的值可以是0或1.请注意,行结束字段是必需的,并且它反映在上面提到的行记录字段的长度中.
在读取文件时,我期待我1 nnn nnnn所在的字节返回到nnn nnnn零件应该为50的位置.
我已经能够使用以下方法执行此操作:
flag = byte >> 7
numbytes = int(bin(byte)[3:], 2)
Run Code Online (Sandbox Code Playgroud)
但是,numbytes计算感觉就像一个廉价的解决方法.
我可以做更多的数学运算来完成numbytes的计算吗?
你会怎么做?
我正在使用简单查询从数据库中检索用户信息.
select * from dbo.[User] u where u.Email = @email
Run Code Online (Sandbox Code Playgroud)
然后我尝试获取一个名为IsConfirmed的列的值(在数据库中表示为位类型列)并将其转换为bool.
bool isConfirmed = int.Parse(sqlDataReader["IsConfirmed"].ToString()) == 1;
Run Code Online (Sandbox Code Playgroud)
然后我得到一个FormatException错误,指出"输入字符串的格式不正确.".
我看到一个类似的问题,答案提供了这段代码:
bool isConfirmed = sqlDataReader.GetBoolean(0);
Run Code Online (Sandbox Code Playgroud)
但这对我的情况不起作用,因为我不知道IsConfirmed列的索引,我不想知道它.我想使用列名.
我以前没有真正使用过按位枚举,我只是想确保我的测试是正确的.我最感兴趣的是测试值None和All.我们从使用此枚举的Web服务接收数据,以对某些数据进行分类.鉴于此,我假设nether None和All将与任何其他值组合.
给出以下按位枚举定义;
[System.FlagsAttribute()]
public enum TrainingComponentTypes : int
{
None = 0,
AccreditedCourse = 1,
Qualification = 2,
Unit = 4,
SkillSet = 8,
UnitContextualisation = 16,
TrainingPackage = 32,
AccreditedCourseModule = 64,
All = 127,
}
Run Code Online (Sandbox Code Playgroud)
我在这个MSDN网站上阅读了关于FlagAttributes 的以下引用;
使用None作为其值为零的标志枚举常量的名称.您不能在按位AND运算中使用None枚举常量来测试标志,因为结果始终为零.但是,您可以在数值和None枚举常量之间执行逻辑而非按位比较,以确定是否设置了数值中的任何位.
此实例中的逻辑比较是否指向枚举的正常相等性测试?例如;
TrainingComponentTypes tct = TrainingComponentTypes.None;
if (tct == TrainingComponentTypes.None)
{ ... }
Run Code Online (Sandbox Code Playgroud)
为了进行逐位比较,我正在执行以下操作;
TrainingComponentTypes tct = TrainingComponentTypes.AccreditedCourse | TrainingComponentTypes.Qualification | TrainingComponentTypes.TrainingPackage;
Assert.IsTrue((tct & TrainingComponentTypes.AccreditedCourse) == TrainingComponentTypes.AccreditedCourse, "Expected AccreditedCourse as part the enum");
Assert.IsFalse((tct …Run Code Online (Sandbox Code Playgroud) 我有一个带值7(0b00000111)的整数我想用函数替换它13(0b00001101).替换整数位的最佳算法是什么?
例如:
set_bits(somevalue, 3, 1) # What makes the 3rd bit to 1 in somevalue?
Run Code Online (Sandbox Code Playgroud) 以下是一个神奇的公式,它给出了一个数字中设置的位数(汉明重量).
/*Code to Calculate count of set bits in a number*/
int c;
int v = 7;
v = v - ((v >> 1) & 0x55555555); // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count
printf(" Number of Bits is %d",c);
/*-----------------------------------*/
Run Code Online (Sandbox Code Playgroud)
来自:http: //graphics.stanford.edu/~seander/bithacks.html
有谁能解释一下这背后的理由?