二进制
在内存中,所有的数都以二进制来表示,二进制的一些概念:
一个二进制位代表一个bit,也就是kb中的b,8个bit一个字节。
数字的表示
正数:表示为二进制数就是直接转化成二进制。
比如 8的二进制表示也就是在内存中是 0000 1000 表示为byte
负数:补码符号位是1,其他位是对应正数的二进制取反加1。
-8的二进制是1111 1000 8的二进制上面已经有了 其实就是取反加1 再给最高位设置为1. 表示为byte
数字的运算
-
且
符号表示:&
运算方式:相同返回1 不同返回0
1011 & 1100 = 1000
-
或
符号表示:|
运算方式:有一个为1就为1 不然为0
1001 | 1100 = 1101
-
非
符号表示:!
运算方式:直接取反
!1001 =0110
-
异或
符号表示:^
运算方式:两个二进制相同为0 不同为1
1001 ^ 1101 = 0100
有的时候会当做两个数交换位置的用法,不用再新建一个变量 比如
a =6 b=7 平时想交换值得
int c =0
c=b
b=a
a=c
使用异或
a=a^b 0110 ^ 0111 = 0001
b=a^b 0001 ^ 0111 = 0110
a=a^b 0001 ^ 0110 = 0111
正好能够交换值。
-
左移
符号表示:<<
运算方式:左移就是左移几位,后面加0
0000 1110 <<2 0011 1000 14 -> 56 左移几位相当于乘2的几次方 不超过该类型最大值。
-
右移
符号表示:>>
运算方式:右移就是二进制右移几位,整数第一位补0 负数第一位补1
0000 1110 >> 2 0000 0011 14->3 除以几个2 的商