Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# Visual Basic.NET中的位操作_C#_Vb.net_Bit Manipulation - Fatal编程技术网

C# Visual Basic.NET中的位操作

C# Visual Basic.NET中的位操作,c#,vb.net,bit-manipulation,C#,Vb.net,Bit Manipulation,我正在用VB.NET编写一些旧的应用程序到C#和ASP.NET 3.5。一切都很顺利,但我有这个问题-而且,由于数据库不会被更改,我必须找到一个解决方案 旧应用程序将所需天数(从星期日到星期六)的列表保存在一个字节中。它就是这样做的: If chkDaily.Checked Then daysBitmask = 127 ' This is for a full week Else For i = 0 To chklstWeek

我正在用VB.NET编写一些旧的应用程序到C#和ASP.NET 3.5。一切都很顺利,但我有这个问题-而且,由于数据库不会被更改,我必须找到一个解决方案

旧应用程序将所需天数(从星期日到星期六)的列表保存在一个字节中。它就是这样做的:

If chkDaily.Checked Then
            daysBitmask = 127    ' This is for a full week
        Else
            For i = 0 To chklstWeekly.Items.Count - 1
                If chklstWeekly.Items(i).Selected Then
                    ' List the selected items
                    daysBitmask += 2 ^ CInt(chklstWeekly.Items(i).Value)
                    daysBitmask = daysBitmask
                    Message2.InnerText = daysBitmask
                End If
            Next
        End If
我把它改成了

        if (rdbDaysList.SelectedValue == DAILY)
            daysBitmask = 127;
        //This is for a full week
        else
            foreach (var d in ckbDaysList.Items)
            {
                ListItem day = d as ListItem;
                if (day.Selected)
                {
                    daysBitmask += Convert.ToByte(Math.Pow(2, Convert.ToDouble(day.Value)));
                }
            }
这很有效。我最大的问题是从字节转换成C代码。 原来的VB.NET就在上面:

            If (dr("DesireDays").ToString() = "127") Then
                chkDaily.Checked = True
                chkWeekly.Checked = False
                chklstWeekly.Enabled = False
            Else
                chkWeekly.Checked = True
                chkDaily.Checked = False
                chklstWeekly.Enabled = True

                Dim AD As Integer = dr("DesireDays").ToString()
                Dim i As Integer

                For i = 0 To chklstWeekly.Items.Count - 1
                    If AD And 2 ^ i Then
                        chklstWeekly.Items(i).Selected = True

                    End If
                Next i

任何帮助都将不胜感激。

您不想使用
进行加倍,因为您需要
int
(这就是
CInt
提供给您的)

此外,对于二次幂运算,位移位通常比指数运算更清晰(尽管选择适合您的选项)

另一方面,通常使用按位
(垂直
|
条)而不是加法更安全

ListItem day = d as ListItem;

if (day.Selected)
{
    daysBitmask |= 1 << Convert.ToInt32(day.Value);
}
ListItem day=d作为ListItem;
如果(已选择的日期)
{

daysBitmask |=1非常感谢,除了答案之外,我会考虑你的考虑。再次感谢!佩德罗·杜索
ListItem day = d as ListItem;

if ((daysBitmask & (1 << Convert.ToInt32(day.Value))) > 0)
{
    day.Selected = true;
}