Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#旗查理·福克斯 我一直在尝试模仿C++的行为,我在C++中没有任何问题。我有一个基于2的幂的标志集合,还有一个我需要检查它是否存在于集合中的标志 byte flagCollection = 1 | 2 | 4 | 8; byte flag = 2; if ((flagCollection & flag) != 0) MessageBox.Show("y"); else MessageBox.Show("n");_C#_C++_Boolean - Fatal编程技术网

C#旗查理·福克斯 我一直在尝试模仿C++的行为,我在C++中没有任何问题。我有一个基于2的幂的标志集合,还有一个我需要检查它是否存在于集合中的标志 byte flagCollection = 1 | 2 | 4 | 8; byte flag = 2; if ((flagCollection & flag) != 0) MessageBox.Show("y"); else MessageBox.Show("n");

C#旗查理·福克斯 我一直在尝试模仿C++的行为,我在C++中没有任何问题。我有一个基于2的幂的标志集合,还有一个我需要检查它是否存在于集合中的标志 byte flagCollection = 1 | 2 | 4 | 8; byte flag = 2; if ((flagCollection & flag) != 0) MessageBox.Show("y"); else MessageBox.Show("n");,c#,c++,boolean,C#,C++,Boolean,现在的问题是,无论我将Flag设置为(2,3,100,211),我总是得到“y”,除了0。当然,1,2,4,8是一些常数,在我的应用程序中有不同的含义 在C++中: if (flagCollection & flag) 对于上面的变量,结果是真的。好吧,如果你的标志集合有或,1,2,4,8,嗯,是的,我认为每一个不是16的倍数的正整数,当&'d到它时,都会返回一些东西。或者我遗漏了什么?好吧,如果你的标志集合有或,1,2,4,8,嗯,是的,我认为每一个不是16的倍数的正整数,当&'d

现在的问题是,无论我将Flag设置为(2,3,100,211),我总是得到“y”,除了0。当然,1,2,4,8是一些常数,在我的应用程序中有不同的含义

在C++中:

if (flagCollection & flag) 

对于上面的变量,结果是真的。

好吧,如果你的标志集合有或,1,2,4,8,嗯,是的,我认为每一个不是16的倍数的正整数,当&'d到它时,都会返回一些东西。或者我遗漏了什么?

好吧,如果你的标志集合有或,1,2,4,8,嗯,是的,我认为每一个不是16的倍数的正整数,当&'d到它时,都会返回一些东西。还是我遗漏了什么?

你这样做似乎是正确的。我真的不确定你期待什么样的行为。您列出的任何标志(2、3、100、211)都包含1 | 2 | 4 | 8元素。如果你想检查他们是否都在场,你应该这样做

if ((flagCollection & flag) == flag) 
   // ...

你这样做似乎是正确的。我真的不确定你期待什么样的行为。您列出的任何标志(2、3、100、211)都包含1 | 2 | 4 | 8元素。如果你想检查他们是否都在场,你应该这样做

if ((flagCollection & flag) == flag) 
   // ...
这样行吗

[Flag]
public enum flagCollection {
  Type1,
  Type2,
  Type4,
  Type8,
}

flagCollection testValue = flagCollection.Type2

if ((testValue & flagCollection.Type2) == flagCollection.Type2) {
   MessageBox.Show("y");
} else {
   MessageBox.Show("n");
}
不在编译器面前,因此无法检查这是否有效。

这是否有效

[Flag]
public enum flagCollection {
  Type1,
  Type2,
  Type4,
  Type8,
}

flagCollection testValue = flagCollection.Type2

if ((testValue & flagCollection.Type2) == flagCollection.Type2) {
   MessageBox.Show("y");
} else {
   MessageBox.Show("n");
}

不在编译器面前,所以无法检查这是否有效。

谢谢,这正是我真正想做的。还有一件事,只是要确定一下。。。==标志部分是必需的,只是因为我们在C#中,对吗?因为C++中没有它就可以工作。但关于C语言中布尔和int的讨论,需要我们添加= =标志,这是正确的吗?不,在C++中,你必须这样做。谢谢,这就是我想做的。还有一件事,只是要确定…==标志部分是必需的,只是因为我们在C#中,对吗?因为C++中没有它就可以工作。但是,关于C语言中布尔和int的讨论,需要我们添加= =标志,这是正确的吗?不,C++中你也必须这样做。C的行为使我困惑。它的行为与C++有点不同。我想做的是检查集合中是否有某个标志或标志组合。C#行为让我感到困惑。它的行为与C++有点不同。我想做的是检查集合中是否存在某个标志或标志组合。我想做的是检查是否存在某个标志或标志集合。忘了提了,对不起。安德烈给我的解决方案奏效了。我想做的是检查是否有旗帜或旗帜的集合。忘了提了,对不起。Andrey给我的解决方案是有效的。是的,有效,除了“Flags”不是“Flag”,编译器在“if”指令中抱怨它。我不知道那个属性。谢谢!:-)。您还需要将值显式地分配给enum元素,因为即使使用
标志装饰enum
自动分配的值仍然是0、1、2、3、4,…这很奇怪。我想这就是为什么会有Flags属性。如果它不能做到这一点,那么为什么要首先使用它呢?奇怪。我查看了MSDN,他们只说“表示枚举可以被视为一个位字段;也就是说,一组标志。”。好了,现在他们告诉我了,我可以睡个好觉了,笑了。我以为Flags会自动对一个值进行二进制移位。英雄联盟每天学习新的东西。是的,这很有效,除了它是“Flags”而不是“Flag”,编译器在“if”指令中抱怨它。我不知道那个属性。谢谢!:-)。您还需要将值显式地分配给enum元素,因为即使使用
标志装饰enum
自动分配的值仍然是0、1、2、3、4,…这很奇怪。我想这就是为什么会有Flags属性。如果它不能做到这一点,那么为什么要首先使用它呢?奇怪。我查看了MSDN,他们只说“表示枚举可以被视为一个位字段;也就是说,一组标志。”。好了,现在他们告诉我了,我可以睡个好觉了,笑了。我以为Flags会自动对一个值进行二进制移位。英雄联盟每天学习新的东西。