草庐IT

bit-manipulation

全部标签

c# - 在 int 中设置特定位

我需要通过在int值中为每个可能的数据库值设置特定位来屏蔽从数据库中读取的某些字符串值。例如,如果数据库返回字符串“value1”,则位置0的位需要设置为1,但如果数据库返回“value2”,则位置1的位需要设置为1。如何确保int的每一位最初都设置为0,然后只打开指定的位? 最佳答案 如果您有一个int值“intValue”并且您想要在位置“bitPosition”处设置一个特定位,请执行如下操作:intValue=intValue|(1或更短:intValue|=1如果您想重置一点(即将其设置为零),您可以这样做:intValu

c# - BitConverter.ToInt32 是如何工作的?

这是一个方法-usingSystem;classProgram{staticvoidMain(string[]args){////Createanarrayoffourbytes.//...Thenconvertitintoanintegerandunsignedinteger.//byte[]array=newbyte[4];array[0]=1;//Lowestarray[1]=64;array[2]=0;array[3]=0;//Signbit////UseBitConvertertoconvertthebytestoanintandauint.//...Theintanduin

c# - 无法添加类型为 'filter' 且唯一键属性 'name' 设置为 'ASP.Net_4.0_64bit' 的重复集合条目

我遇到这个问题已经有一段时间了。当我打开一个指向我的本地主机的asp.net页面时,就会发生这种情况。我正在运行带有visualstudio2012和iis7.5的Windows2008r2。它显示的配置源是这样的。:1451:1452:1453:它表明它在第1452行出错。最初,这是inetsrv32位和64位位置的applicationHost.config文件中的一个问题。我进去并删除了重复的4.0条目,它工作了好几个月。然后它又开始抛出这个错误。那时我刚刚完全重新安装了IIS,我的应用程序又开始工作了。此错误再次开始出现,我再次执行了IIS的完全重新安装,但这次没有帮助,我的应

c# - C# 中的按位 "~"运算符

考虑这个单元测试代码:[TestMethod]publicvoidRunNotTest(){//10101100=128+32+8+4=172byteb=172;//01010011=64+16+2+1=83Assert.AreEqual(83,(byte)~b);}这个测试通过了。但是,如果没有字节转换,它就会失败,因为“~”运算符返回-173的值。这是为什么? 最佳答案 对int的提升发生在byte上,因为没有为它们定义二进制补码。参见Unarynumericpromotions和Bitwisecomplementoperato

c# - 在 Visual Studio 2015 中用于符号扩展操作数的按位或运算符

我刚刚尝试安装VisualStudio2015,在尝试编译一个旧项目时,我收到了警告CS0675Bitwise-oroperatorusedonasign-extendedoperand;considercastingtoasmallerunsignedtypefirst对于在VisualStudio2013中编译时未给出相同警告的一段代码。我发现重现所需的只是这段非常简单的代码:shorta=0;intb=0;a|=(short)b;现在,我已经阅读了thisSOquestion,我读过EricLippert'sblogpost在这个问题上,我很快就阅读了signextension,

c# - 根据另一个 bool 值取反一个 bool 值

在不编写b两次的情况下编写此C#代码的最后一行的简短、优雅、按位的方法是什么:boolgetAsIs=....boolb=....getAsIs?b:!b 最佳答案 真值表可以表示为:getAsIsbgetAsIs?b:!b--------------------------------001010100111结果可以表示为:result=(getAsIs==b); 关于c#-根据另一个bool值取反一个bool值,我们在StackOverflow上找到一个类似的问题:

c# - 为什么 'Any CPU (prefer 32-bit)' 允许我在 .NET 4.5 下分配比 x86 更多的内存?

根据许多SO答案和thiswidelycitedblogpost,为“任何CPU”构建并选择了“首选32位”选项的.NET4.5应用程序将在32位和64位系统上作为32位进程运行(与.NET4.0和更早版本不同)。换句话说,x86和AnyCPU选择了'prefer32-bit'是等价的(忽略它是否可以在ARM上运行)。但是,我的测试表明,在64位系统上,“AnyCPU更喜欢32位”应用程序(我确认它运行32位)可以分配比x86应用程序更多的内存。我编写了一个.NET4.5C#控制台应用程序,它在一个循环中分配10MB字节数组(当然保留引用)直到它遇到OutOfMemoryExcepti

c# - 左移 255(作为一个字节)

谁能解释为什么下面的代码不能编译?byteb=255错误:Constantvalue'510'cannotbeconvertedtoa'byte'我期待以下二进制文件:11111110类型转换让我很困惑。 最佳答案 C#中的数字字面量是int,而不是byte(位移将由编译器计算,因此只保留510)。因此,您试图为不适合的byte分配一个值。你可以用255掩码:byteb=(255再次将结果减少到8位。与Java不同,C#不允许溢出未被检测到。基本上,在尝试将510分配给一个字节时,您有两个明智的选择:要么限制在最大值,然后您将得到2

c# - 为什么在与 1 进行异或运算时取反值会改变结果?

这个问题在这里已经有了答案:Whatis“2'sComplement”?(24个答案)关闭5年前。我知道异或的工作原理,Console.WriteLine(1^1);//returns0结果0000000100000001--------00000000但这如何返回2?Console.WriteLine(-(-1^1));//returns2

c# - 测试按位枚举值

我以前没有真正使用过按位枚举,我只是想确保我的测试是正确的。我最感兴趣的是测试值None和All。我们从使用此枚举对某些数据片段进行分类的Web服务接收数据。鉴于此,我假设None和All都不会与任何其他值组合。给定以下按位枚举定义;[System.FlagsAttribute()]publicenumTrainingComponentTypes:int{None=0,AccreditedCourse=1,Qualification=2,Unit=4,SkillSet=8,UnitContextualisation=16,TrainingPackage=32,AccreditedCou