• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【C#食谱】【风味小吃】菜单4对各种数据类型运用位运算符求补运算符 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
前面的菜单2 其实已经包括了菜单3的内容(角度和弧度的转换),所以,这里就直接跳到菜单4。

问题

位运算求补运算符(~)被重载为可以直接引用于intuintlongulong以及由这些类型组成的枚举类型。但是,你需要在另一种数值类型上运用这个运算符。

解决方法:

对任何类型数据类型都能够使用位运算求补运算符,你必须把位运算符的即使结果转换为你想要的数据类型。下面的代码实现了对于byte类型数据的功能:

        
        byte y = 1;
        
byte result = (byte)~y;

讨论:

以下代码显示了针对byte数据类型的,错误的使用位运算求补运算符的方法:

       byte y = 1;
       Console.WriteLine(
"~y = " + ~y);

这段代码输出了出人意料的结果:

        -2

很明显,执行上述位运算符的结果是不正确的;它应该是254。事实上,byte是一个无符号数据类型,因此它不可能等于一个负数。如果把代码改成这样:


        byte y = 1;
        
byte result = ~y;

你会得到一个编译时错误:Cannot implicitly convert type “int” to “byte”。这个错误信息,给出了一些解释:为什么这个运算没有按照预期的工作。要想更正这个问题,你必须在把它赋值给result变量之前,显示转换为byte类型:


        byte y = 1;
        
byte result = (byte)~y;

这个转换是必需的,因为位运算符只能操作六种数据类型:intuintlongulongbool和枚举数据类型。当一个位运算符操作一个其他的数据类型时,该数据类型会被转换为和它匹配得最接近的支持的数据类型。因此,在执行为运算符之前,一个byte数据类型会被转换为一个int数据类型。

注意,跟byte类型不同,int类型是一个有符号数据类型。这是为什么你取得-2而不是254作为结果的原因。这个byte类型转换为和它最接近的数据类型的转换称为数字增进。数字增进在你对其他数据类型使用二元操作符,包括位二元操作符时也会出现。




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
对于C语言复杂指针类型的分析发布时间:2022-07-14
下一篇:
简单实现LinuxC下的线程池.发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap