进制的转换

所有数字在计算机底层都以二进制形式存在。

二进制(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不区分大小写。

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

将带符号位的机器数对应的真正数值称为机器数的真值
因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
计算机以**二进制补码**的形式保存所有的整数,即真值。

  • 原码:直接将一个数值换成二进制数。最高位是符号位
  • 正数的原码、反码、补码都相同
  • 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
  • 负数的补码是其反码+1
eg.
对于二进制补码表示法,-10的真值可以通过以下步骤计算:

确定原码。-10的原码为10000000 00000000 00000000 00001010(即最高位为符号位,0表示正数,1表示负数)。

计算反码。将原码中除符号位之外的其他位取反得到反码,即11111111 11111111 11111111 11110101。

计算补码。将反码加1得到补码,即11111111 11111111 11111111 11110110。

因此,-10的真值用二进制补码表示为11111111 11111111 11111111 11110110。

为什么要使用原码、反码、补码表示形式呢?

计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 
根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 
这样计算机运算的设计就更简单了。

-128的补码 1000 0000
当java 128转为byte类型正128会变为-128

进制转换

十进制转二进制 除2取余
十进制转八进制 除8取余
十进制转十六进制 除16取余
如十进制257转换二进制 除2取余
1
0
0
0
0
0
0
0
1
从下往上写则二进制表示为100000001
十进制257转换八进制 除8取余
1
0
4
十进制257转换十六进制 除16取余
1
0
1
从下往上写则八进制表示为101
也可将二级制 分别取三为转换为8进制 
100 4
000 0
001 1
转十六进制同理
0001 1
0000 0
0001 1

左移(<<)箭头指向作左边

符号位不变,将真值左移,左边二进制数丢弃,右边补0
eg. 5<<2
真值 00000101
左移后00010100
20 相当于5x2^2
eg -5<<2
真值
11111011
左移后 11101100
-20 相当于-5x2^2

右移(>>)箭头指向右边

符号位不变 真值右移,符号位0则左边补0,符号位位负数则左边补1,右边丢弃
eg. 10>>2
真值 00001010
右移后00000010
2 相当于10/2^2(向下取整 为2)
eg -10 >>2
真值11110110
右移后 11111101
-3 相当于-10/2^2 (向下取整 为-3)
->>>是 无符号右移
->>是有符号右移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值