栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Byte.toUnsignedInt() +与运算 原码,反码,补码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Byte.toUnsignedInt() +与运算 原码,反码,补码

这里写自定义目录标题
  • 事由
    • 运行结果如下
    • & 与运算
    • **==如何在二进制中表示复数?==**
    • 原码,反码,补码
    • 一颗大栗子
      • over!!!

事由
周五有点无聊没事看书看到了这个注意,然后就想着动手实现一下。

Byte.toUnsignedInt(c);
int a = Byte.toUnsignedInt((byte) -1);
int b = Byte.toUnsignedInt((byte) -2);
int h = Byte.toUnsignedInt((byte) 1);
System.out.println(a);
System.out.println(b);
System.out.println(c);

运行结果如下


看到结果引起了我的深思 靠! 这么奇怪x值为-1 其值255 ,为1时127。一下没忍住就把它源码扒出来看看。

 public static int toUnsignedInt(byte x) {
        return ((int) x) & 0xff;
    }

    

好吧 下面的注释我一个都看不懂但不影响我看代码。
将x强制转化成int 类型再与0xff 进行与运算。
以为就到这了? 其实吧并没有 毕竟我准备水点字。就再扒一下,毕竟我菜鸟的嘛 有太多不会的了

& 与运算

参加运算的两个数据,按二进制位进行“与”运算。
运算规则:两位同时为“1”,结果才为“1”,否则为0

1.举个栗子
例如:1&3即 0000 0001 & 0000 0011 = 0000 0001因此,1&3的值得1。
另,负数按补码形式参加按位与运算。

如何在二进制中表示复数?

好问题!!!! 我也不晓得 毕竟是菜鸟嘛 所以我就去问了问度娘。
概括一下就是: 取其正整数的原码再取反码,反码的补码,就是负整数的二进制
确实有点绕,那看图吧

补码就是负数的二进制

原码,反码,补码

顺手百度不谢不谢
原码:一个整数,按照绝对值大小转换成的二进制数。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码
补码:反码最右边+1

一颗大栗子

x为-1,其数据类型为Byte 二进制为:
还是算一下吧
1 的原码为 0000 0001
反码为 1111 1110
补码为 1111 1111
int(x) 强制转换 x从一个字节八位变成了 4个字节 32位,高24位填充1
(问为什么填充1 以为其为正数时高位全填充了0 )
‘24个1’ 1111 1111

0xff 为16进制 转换成十进制是 255 二进制 巧了“24个0” 1111 1111
然后与运算
x: 1111 1111
oxff: 1111 1111
结果为
1111 1111 (没错就是它本身255)

over!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号