最近调试封装蓝牙指令涉及到二进制运算
备忘:
-
异或(^),
对应位如果相同,结果为0,否则为1。
示例:
int a = 0x66 ;
int b = 0xff ;
int c = a^b;
//输出结果 应该是 0x99
//01100110^11111111=10011001;
-
与(&),
参与运算的两位都为1,结果为1,否则为0。
示例:
int a = 0x66 ;
int b = 0xff ;
int c = a&b;
//输出结果 应该是 0x66
//01100110&11111111=01100110;
-
或(|),
参与运算的两位只要有1位为1,结果为1,否则为0。
示例:
int a = 0x66 ;
int b = 0xff ;
int c = a|b;
//输出结果 应该是 0xff
//01100110|11111111=11111111;
-
取反(~),
当前位为1,则输出0,当前位为0,则输出1。
示例:
int a = 0x66 ;
int c = ~a;
//输出结果 应该是 0x99,或者 10011001;
-
左移(<<),
将一个运算对象的各二进制位全部左移若干位,左边的二进制位丢弃,右边补0
示例:
int a = 0x66 ;
a = a <<2;
//输出结果 应该是 10011000,
如果左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
-
右移运算符(>>),
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
示例:
int a = 0x66 ;
a = a >> 2;
//输出结果 应该是 00011001,
//操作数每右移一位,相当于该数除以2
-
负数的二进制,
先取绝对值,转成二进制后取反,末位再加一。
示例:
int a = -17;
//输出结果 11101111,或0xef;
//-17 -> 17 -> 00010001 -> 11101110 -> 11101111;
网友评论