我正在为我的MVC应用程序设计用户设置,现在我有大约20个用户可以切换的bool值设置。由于每个用户将始终拥有每个设置,因此我正在考虑将每个设置作为bool值存储在用户表中。尽管随着应用程序需求的增长,这会变得笨拙。第一个问题-在这种情况下,在您的表格上放置大量列有什么问题吗?然后我考虑使用标志,并将设置存储为一个数组中的每个位:[Flags]publicenumSettings{WantsEmail=1,WantsNotifications=2,SharesProfile=4,EatsLasagna=8}然后每个用户在他们的用户行中将有一个“设置”列,如果有20个设置,该列存储一个2
我有以下任务:Computex/(2^n),for0usingbitshifting.Requirement:Roundtowardzero.Examples:divpwr2(15,1)=7divpwr2(-33,4)=-2Legaloperators:!~&^|+>Maximumnumberofoperators:15这是我到目前为止所得到的:publicintDivideByPowerOf2(intx,intn){//TODO:findoutwhyDivideByPowerOf2(-33,4)=-3insteadof-2returnx>>n;}DivideByPowerOf2(15
如何最有效地计算C#中整数(对数基数2)所需的位数?例如:intbits=1+log2(100);=>bits==7 最佳答案 轻微对Guffa答案的改进...由于您添加到结果中的数量始终是2的幂,因此使用位操作可以在某些体系结构上产生轻微的改进。此外,由于我们的上下文是位模式,因此使用十六进制更易读。在这种情况下,将算术移动2的幂是有用的。intbits=0;if(n>0xffff){n>>=16;bits=0x10;}if(n>0xff){n>>=8;bits|=0x8;}if(n>0xf){n>>=4;bits|=0x4;}i
给定枚举:[Flags]enumfoo{a=1,b=2,c=4}然后fooexample=a|b;如果我不知道foo是否包含c,之前我一直在写以下内容if(example&foo.c==foo.c)example=example^foo.c;有没有办法在不检查example中是否存在foo.c的情况下执行此操作?关于添加,我可以做一个OR,如果枚举值已经存在于example中,那么它不会 最佳答案 我想你想要:example&=~foo.c;换句话说,执行按位“与”掩码,每个位都设置c的位除外。编辑:我应该在Unconstraine
在StackOverflow上有很多关于这个的问题。很多。但是我找不到这样的答案:使用C#适用于64位整数(相对于32位)快于:privatestaticintObvious(ulongv){intr=0;while((v>>=1)!=0){r++;}returnr;}甚至intr=(int)(Math.Log(v,2));我在这里假设64位IntelCPU。一个有用的引用是BitHackspage另一个是fxtbook.pdf然而,虽然这些提供了解决问题的有用方向,但它们并没有给出现成的答案。我正在寻找一个可重复使用的函数,它可以执行类似于_BitScanForward64的操作和_
RDBMS中的适当规范化意味着表的激增。整数字段可以将正交数据存储为位——这可以用作附加表的替代品,而不牺牲关系完整性吗? 最佳答案 对于一对多关系,其中“多”具有少量已知值,关系可以作为位掩码作为整数存储在父表中,从而无需额外的表。假设我们有一张Person表,我们想知道一个人去过多少个大陆。我们首先为每个大陆分配一个“正交”位值。在C#中,枚举是一个不错的选择:[Flags]publicenumJobAdvertisingRegion{NorthAmerica=1,//or1然后Persons表可以简单地包含一个名为Contin
我最近在查看一个保存了一些神秘值的配置文件。我碰巧有可用的源代码,所以我看了一下它在做什么,它保存了一堆不同的值并将它们相互移位。这让我感到困惑,为什么有人会那样做。那么我的问题是:以这种方式存储数字数据是否有明显的优势?我可以看到它如何使按字节存储的值稍微小一些,但要节省几个字节的存储空间似乎需要做很多工作。它也似乎会慢得多。我想到的另一种可能性是它被用于混淆目的。这是位移位的常见用法吗? 最佳答案 这是位移位的常见用法之一。有几个好处:1)移位操作很快。2)您可以在单个值中存储多个标志。如果您的应用具有多项功能,但您只想启用某些
我刚刚在翻译一些数据之间发现了一个有趣的问题:VB.NET:CByte(4)返回4但是C#:(byte)4返回1024也就是说,为什么VB.NET:(CByte(4)返回类型{Name="Byte"FullName="System.Byte"}然而C#:((byte)4返回类型{Name="Int32"FullName="System.Int32"}这两个将二进制移位视为相同的原因吗?接下来,是否有任何方法可以使C#移位执行与VB.NET相同(要使VB.NET像C#一样执行,您只需执行CInt(_____))? 最佳答案 根据htt
如何计算Int32中的前导零?所以我想做的是编写一个函数,如果我的输入是2,它返回30,因为在二进制中我有000...0000000000010。 最佳答案 注意使用dotnetcore>=3.0?看here.我们以数字20为例。可以用二进制表示如下:00000000000000000000000000010100首先,我们通过右移和按位对自身进行“或”操作,将最高有效位“涂抹”到较低的位位置上。00000000000000000000000000010100or00000000000000000000000000001010(ri
在C#中,我有一个存储在int中的32位值。我需要查看是否设置了特定位。我需要的位是0x00010000。我想到了这个解决方案:这是我要找的:Hex:000100000Binary0000|0000|0000|0001|0000|0000|0000|0000|0000SoIrightbitshift16,whichwouldgiveme:Hex:000000001Binary0000|0000|0000|0000|0000|0000|0000|0000|0001Ithenbitshiftleft3,whichwouldgiveme:Hex:000000008Binary0000|000