注册 登录
编程论坛 C# 论坛

【求助】:按位异或运算,如何显示 8 位二进制值?——欲重验按位异或,无奈长串数字一

lxsxd 发布于 2014-04-27 17:21, 639 次点击
大侠们好:
    我在自学C#位运算,当学到按位异或运算时,出现了一个困惑。情况如下:

(1)代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace weiyuansuan
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 6, y = 10;
            string strx = Convert.ToString(x, 2);  //十进制转为二进制
            string stry = Convert.ToString(y, 2);
            Console.WriteLine("x的二进制值={0,8},x的十进制值={1} \ny的二进制值={2,8},y的十进制值={3}", strx, x, stry, y);

            Console.WriteLine();

            int z = ~x;//按位取反
            string strz = Convert.ToString(z, 2);
            Console.WriteLine("z的二进制值={0,8} \nz的十进制值={1}", strz, z);

            Console.WriteLine();

            Console.Read();
        }
    }
}

(2)运行结果
X的二进制值=     110,X的十进制值=6
Y的二进制值=    1010,Y的十进制值=10

Z的二进制值=11111111111111111111111111111001
Z的十进制值=-7

(3)我的困惑——关于Z的值
我想要的结果是:Z的二进制值=11111001 ,即8位;
                Z的十进制值=249(128+64+32+16+8+0+0+1)
我的困惑是:这是怎么回事?我不太明白。我该如何解决这个问题?请高手们帮忙。谢谢!
3 回复
#2
wp2319572014-04-27 18:09
长度问题

简单点 可以这样修改

  byte z = (byte)~x;//按位取反
#3
wp2319572014-04-27 18:12
或者这样修改也行

int z = (~x & 0xffff) & 0xff;
#4
lxsxd2014-04-27 21:04
谢谢您!
1