二进制相关小知识

二进制单位

  • 二进制(binary):0,1,满2进1.以0b或0B开头。
  • 十进制(decimal):0-9,满10进1。
  • 八进制(octal):0-7,满8进1.以数字0开头表示。
  • 十六进制(hex):0-9及A-F,满16进1.以0x或0X开头表示。此处的A-F不区分大小写。

bit,中文译为位,是指0或者1两个状态,是二进制中是最小的单位。
byte,即字节,有8个位。
当用16进制表示的时候,0xAB是一个byte,但是看起来是有两个数字。其中一个数字表示4bit。一位叫bit,8位叫byte,猜猜4位叫什么?答案,是nibble。
为什么呢?16进制最大单数值是F即15,而用二进制表示得需4位即1111,即1byte=8bit=20X
也有解释:1btye是8bit,最大值为0B11111111即255,此时需要两位16进制才能表示,所以1byte相当于两个16进制位,即1byte=8bit=2
0X

比如我们说15,都会预设是多少字节长度的。
如果是两个字节长度的15,应该写作0x000F,
如果一个字节的15就会是0x0F。
有人会说,这有什么区别?前面不都是0嘛。
区别是对于两个字节长度的15,它的最高位是第16位(从右边数)。而对于一个字节的15,它的最高位是第8位.决定相加会不会溢出。
比如一个字节的255 + 1就会溢出,它的结果是0x00,而两个字节长度的255+1等于256,即0x0100,不会溢出。

三码

  • 原码:未经更改的码。它由最左边的符号位和二进制数构成。
  • 反码:正数不变,负数取反的码。正数的反码和原码一样,负数的反码需要保留最左边符号位,然后将原码数值位按照每位取反得到。
  • 补码:正数不变,负数取反补一的码。正数的补码和原码一样,负数的补码需要保留最左边符号位,然后将原码数值位按照每位取反再加一;是计算机数据存储的最常用的方式。

总结

  1. 三码都是二进制表达。
  2. 三码第一位是符号位,1 表示负数,0 表示正数,其余位是数值位。
  3. 正数的三码都一样。
  4. 负数的反码是在原码基础上对非符号位取反,即负数反码=符号位+原码数值位取反。
  5. 负数的补码是在反码基础上加一,即负数补码=反码+1。
  6. 负数补码转原码是在补码基础上减一,然后对非符号位取反,即负数原码=(补码-1)&&数值位取反。
  7. 计算机数据存储都是补码。
  8. 各自优缺点:
    原码最好理解,但是加减法不够方便,还有两个零
    反码稍微困难一些,解决了加减法的问题,但还是有个零
    补码理解困难,其他就没什么缺点了

参考:
Java 基本类型的各种运算,你真的了解了么?
搞搞字节,byte的小知识

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值