标志枚举中 按位或运算的理解
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/12 07:34:14
标志枚举中 按位或运算的理解
我定义了标志枚举如下
[Flags]
enum Weeks
{
Sunday=1,
Monday=2,
Tuesday=4,
Wensday=8,
Thursday=16,
Friday=32,
Saturday=64
}
然后测试代码中是
Console.WriteLine("星期二和星期四 为开会日");
Weeks meetingDays = Weeks.Tuesday | Weeks.Thursday; //按位‘或’运算
Console.WriteLine(meetingDays+"\n");
输出结果是 Tuscany,Thursday
按位‘或’运算(同一个位上相同则为0不同则为1)得到的不是一个结果么?
比如 “1|2”结果是“3”,
但是在上面的结果中为什么会输出两个结果 “周二和周四”呢?
我定义了标志枚举如下
[Flags]
enum Weeks
{
Sunday=1,
Monday=2,
Tuesday=4,
Wensday=8,
Thursday=16,
Friday=32,
Saturday=64
}
然后测试代码中是
Console.WriteLine("星期二和星期四 为开会日");
Weeks meetingDays = Weeks.Tuesday | Weeks.Thursday; //按位‘或’运算
Console.WriteLine(meetingDays+"\n");
输出结果是 Tuscany,Thursday
按位‘或’运算(同一个位上相同则为0不同则为1)得到的不是一个结果么?
比如 “1|2”结果是“3”,
但是在上面的结果中为什么会输出两个结果 “周二和周四”呢?
你的按位或的结果确实只有一个,但是却有两个位被置位了啊.
这个toString是调用默认的toString,所以会使用G格式来显示.
因为你设置了[Flags]标志,所以会根据多个位把结果组合起来显示,返回用分隔符分隔的这些常数名称的列表
MSDN里面对于G格式的描述:
再问: 能不能解释的稍微通俗一点,我是刚学习没多久,上面的解释看不大懂。
再答: 简单的说,对于枚举的tostring来说,是否有给枚举类型设置flag标志会采取不同的处理办法。 如果没有定义为flags,那么就是真的只有一个值,在你的例子中,4 与16进行按位或之后的值为20,如果你把你的枚举的flag标志去掉,那么tostring结果就是20,因为这个时候20这个数在你的枚举里面找不到对应的,所以就直接显示20了 但是你的枚举定义了flag属性,所以给定的meetingDays的每一位都代表了一个值,所以meetingDays是可以具备多个值得,tostring会依次检查每一位,把所有置1的位代表的字符串以,分割返回回来,而20正好是代表Tuesday和Thursday的位置1了,所以toString的结果就是,分割的Tuesday和Thursday,那么就是Tuesday,Thursday了
这个toString是调用默认的toString,所以会使用G格式来显示.
因为你设置了[Flags]标志,所以会根据多个位把结果组合起来显示,返回用分隔符分隔的这些常数名称的列表
MSDN里面对于G格式的描述:
再问: 能不能解释的稍微通俗一点,我是刚学习没多久,上面的解释看不大懂。
再答: 简单的说,对于枚举的tostring来说,是否有给枚举类型设置flag标志会采取不同的处理办法。 如果没有定义为flags,那么就是真的只有一个值,在你的例子中,4 与16进行按位或之后的值为20,如果你把你的枚举的flag标志去掉,那么tostring结果就是20,因为这个时候20这个数在你的枚举里面找不到对应的,所以就直接显示20了 但是你的枚举定义了flag属性,所以给定的meetingDays的每一位都代表了一个值,所以meetingDays是可以具备多个值得,tostring会依次检查每一位,把所有置1的位代表的字符串以,分割返回回来,而20正好是代表Tuesday和Thursday的位置1了,所以toString的结果就是,分割的Tuesday和Thursday,那么就是Tuesday,Thursday了
C的位运算中
请问在计算机运算结果中如何用结果的符号位和进位标志判别是否发生溢出,
汇编语言中标志寄存器的标志位的改变,与参加运算的是有符号数还是无符号数有关吗?
求解一道ADD指令中的加法运算并判断OF,ZF标志位的值
不同枚举中的名字必须互不相同,同一枚举中不同的名字可以有相同的值.啥意思?
定义新运算中符号的理解
问几个关于左移运算符,右移运算法,按位与,或,异或,按位取反运算问题
vb中异或运算xor的运算法则怎么回事
求用MATLAB或其他软件解决多元一次方程组的全部整数解,枚举出来.
C语言中位运算是怎么样的?
运算产生了借位汇编语言进位与借位的问题.2-3是否会产生借位?从常理上看好像产生了借位,标志寄存器中CF应该置位,但在计
枚举类型的用法?主要求解易语言中枚举类型的形式 和用法,真名用才恰当 能给出例子最好.