位运算

| 符号 | 含义 | 运算逻辑 |
| & | 按位与 | 全true(1),即为true(1) 全false(0),即为false(0) 一个false(0)一个true(1),还是false(0) |
| | | 按位或 | 有true(1)就是true(1) 无true(1)就是false(0) |
| ^ | 按位异或 | 只要相同都是false(0) 只有不同才是true(1) |
| ~ | 按位取反 | 把1变0,0变1 |
| << | 左移 | 把所有位向左移动N位(比如5 << 2 就是向左移动两位) , 右边两位补0 , 左边两位去掉 |
| >> | 右移 | 把所有位向右移动N位(比如5 >> 2 就是向右移动两位) , 如果这个数是负数则补1 , 否则补0 , 右边两位去掉 |
| >>> | 无符号右移 | 针对32位和64位 , 所有位向右移动 ,左边位补0 |
5的二进制对应为 : 00000101 -5的二进制为: 11111011 7的二进制对应为 : 00000111 2的二进制对应为 : 00000010
全true(1),即为true(1) , 全false(0),即为false(0) , 一个false(0)一个true(1),还是false(0) ,运算后得到 : 00000101, 也就是 5

有true(1)就是true(1) , 无true(1)就是false(0) , 运算后得到 : 00000010, 也就是 2

只要相同都是false(0) , 只有不同才是true(1) , 运算后得到 : 0000010 , 也就是 5

0变为1 , 1变为0 , 运算后得到 : 11111010, 也就是 250

把所有位向左移动两位 , 右边两位补0 , 左边两位去掉 , 运算之后得到: 00010100 , 也就是20

把所有位向右移动两位 , 如果这个数是负数则补1 , 否则补0 , 右边两位去掉
5是正数 , 所以补0 , 如果5是负数 , 那么就补1 , 运算之后得到00000001 , 也就是1




文章转载自猿人刘先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




