什么是进制
是数学中的一个概念,就是数据“逢几进位”。例如:生活中用的技术方法 —— 十进制,十进制就是数字逢十进一。
例如:一个 星期右七天,就是逢七进一;一个月右30天就是逢30进一;一年有365天,就是逢365进一,一分钟有60秒,就是逢60进一。诸如此类的还有很多!!!
Java 针对整数常量提供了4种表现形式
二进制四进制
八进制
十六进制
为什么会有二进制,八进制,十六进制
有二进制的原因是因为计算机最底层的弟子元气就只有2种状态 —
高电平和低电平(有点和无电)。
任何数据在计算机中都是以二进制的形式存在的,二进制早期由电信号开关演变而来,一个整数在内存中一样也是二进制的,但是使用一大串1或者2组成的数组进行使用很麻烦!
有8进制,16进制的原因是因为二进制表现同样的数量太长不方便阅读和记忆,而8进制和十六进制较短,方便阅读和记忆
计算机中存储单位的换算
什么是bit(比特) 二进制:001 每一位都是一个bit,二进制只能是0或12个数字组成 是计算机中一个最小的信号单元,可能是高电平或者是低电平1 byte = 8 bit
1 kb = 1024 byte kb是千字节 1024 是 2的10次方
1 mb = 1024 kb mb 兆字节
1 gb = 1024 kb GB 十亿字节,千兆字节
1 ti = 1024 gb TB 太字节
奥斯卡马值
不同进制的组成
二进制
由 0,1 组成。以0b开头
八进制
由0至7组成,以0开头
十进制
由0至9组成。整数默认是十进制的 1
十六进制
由0至9,a,b,c,d,e,f (大小写均可),以Ox开头
位逻辑运算符(都是数据类型(二进制))
&: 按位与
| :按位或
^ :按位异或
~: 按位取反
位移运算符
<<: :左移
> > : 右移
>>>: 无符号右移
public static void main(String[] args) {
/**
* 按位与 & 规则: 将同为 1的值相加并且返回
* 3 & 4 结果是多少?
* 在进行位运算符的时候,要把数据转换成二进制!并且全部都是 二进制的补码形势!
* 3的二进制: 0b00000000000000000000000000000011
* 4的二进制: 0b00000000000000000000000000000100
* 3的4按位&:
* */
// System.out.println(0b0000000000000000000000000000000100001&0b0000000000000000000000000000001100011);
// System.out.println(-3&-4);
/**
* 按位或 | 规则: 每个值想比较,那个值等于1就返回值
* 3 & 4 结果是多少?
* 在进行位运算符的时候,要把数据转换成二进制!并且全部都是二进制的补码形势!
* 3的二进制: 0b00000000000000000000000000000011
* 4的二进制: 0b00000000000000000000000000000100
* 3的4按位|: 0b00000000000000000000000000000111
* */
// System.out.println(0b00000000000000000000000000000011|0b00000000000000000000000000000100|0b00000000000000000100000000000100);
/**
* 按位异或 ^ 规则: 同一个位置上 2个值不相同的值就返回
* 3 & 4 结果是多少?
* 在进行位运算符的时候,要把数据转换成二进制!并且全部都是二进制的补码形势!
* 3的二进制: 0b00000000000000000000000000000011
* 4的二进制: 0b00000000000000000000000000000100
* 3的4按位&: 0b00000000000000000000000000000111
* */
// System.out.println(0b00000000000000000000000000000111^0b00000000000000000000000000000100);
/**
* 按位异或 ~ 规则: 取反(等于这个树的负数+1)
* 3 & 4 结果是多少?
* 在进行位运算符的时候,要把数据转换成二进制!并且全部都是二进制的补码形势!
* 4的二进制: 0b00000000000000000000000000000100
* 4按位~: -5
* */
// System.out.println(~0b00000000000000000000000000000100);
/** <<<
* 相当于 1的10次方 等于 1024 因为 1在二进制中相当于 2(除了第一位)
* */
// System.out.println(1<<10);
/** >>
* 相当于 1向左边边移动了1位
* 例如: 1024 是 1的10次方 右移一次 之后 就变成了 1的 9次方
* */
// System.out.println(1>>1);
/* >>>
* 无符号右移
*
* */
//不要用 short 和 byte 来做 无符号右移,不然会溢出的
byte a =(byte)(-128>>>2);
short b =(short)(-258>>>2);
int c =(-258>>>2);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}