C#按位运算的类型转换的问题


在微软的问题区晃了一下,发现有人提出这样的问题,有些意思,看来.net智能化还有待改进。

Question:

在visual C#中,不管你声明的变量是什么类型,值类型总是会先被转换位int类型,然后才会进行按位左移操作,即使是强制类型转换也于事无补。举个例子来说吧:

byte A=188;

congsole.writeline(A<<8);

即使A是声明为byte类型的,可是它会隐式转换为int类型,然后才会进行按位左移

即使这样也没用:

console.writeline((byte)A<<8);

我想请教的是如何才能使A不转换成int类型,而是以byte类型的方式存在,然后才进行按位左移操作?

呵呵,左移8位,最后肯定超出byte的最大值255了,让你直接转换的话就会溢出了,既然微软不给转回来,只能自己动手了,源码如下:

            byte A = 188;
            Console.WriteLine(A<<8);
            int B = A << 8;
            byte C =Convert.ToByte(B & 0xff);
            Console.WriteLine(C);
            Console.ReadLine();

int是32位的,byte是8位的,取0xff,既二进制的11111111,亦即00000000 00000000 00000000 11111111 与原来的数字按位与一下,将高位全部舍弃,控制最终的结果处于byte的取值范围以内,就可以了。

PS:哪位高人能够解答一下:
    Convert.ToByte(B & 0xff)  和 (Byte)(B & 0xff))的区别呢?都是强制转换,有时就不能用第二个,困惑中......



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值