java 无符号数字,了解Java无符号数字

小编典典

Java实际上没有无符号原语。

值127实际上由“ 01111111”表示,第一位是符号(0为正)。

一个无符号字节将能够保存0到255的值,但是127是有符号字节的最大值。由于一个字节有8位,有符号的一个消耗1来保存符号。因此,如果要表示大于127的值,则需要使用具有更大位数的更大类型。较大的类型也有一个符号保留位,但是它至少有8位用于实际值,因此可以表示值255。

话虽如此,您可能应该避免使用byte和short,因为它们存在问题。您会注意到我将结果强制转换为short,因为运算符实际上返回了int。您应该只在int和long中坚持使用Java,因为它们实现得更好。

编辑:由于符号位是short的第一位,所以AND运算符使其无符号,然后将保存字节值的8位复制到short的后8位。因此,如果您有一个负数,则第一个为1的位(这意味着它为负数)实际上成为该值的一部分。短路将始终为正,因为其符号位处于受短路影响的2的幂的2的高位。

byte: 10101101

|||||||

short: 0000000010101101

|||||||||||||||

编辑2:但是请注意,由于负值使用二进制补码表示,因此该值可能不是您期望的值。所有正值都保持不变。

但是-128 = 0x10000000将变为128

-127 = 0x10000001将变为129

依此类推,直到-1 = 0x11111111将变为255

2020-11-16

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值