按位与运算符(&)
对俩个数据进行二进制按位与运算。
二进制规则:0&0=0; 0&1=0; 1&0=0; 1&1=1
双1为1,否则为0.
例:102&255即:01100110&11111111=01100110 十进制为:102
01100110
11111111
--------------------
01100110
负数按补码形式参加按位与运算
按位或运算符(|)
对俩个数据按二进制按位或运算。
二进制规则:0&0=0; 0&1=1; 1&0=1; 1&1=1
有1为1,否则为0.
例:102&255即:01100110&11111111=11111111 十进制为:255
01100110
11111111
--------------------
11111111
负数按补码形式参加按位与运算
异或运算符(^)
对两个数据按二进制位进行“异或”运算。
二进制规则:0^0=0; 0^1=1; 1^0=1; 1^1=0
相同为0,否则为1
例:102&255即:01100110&11111111=11111111 十进制为:153
01100110
11111111
--------------------
10011001
负数按补码形式参加按位与运算
取反运算符(~)
对1个数据按二进制位进行“取反”运算。
二进制规则:~0=1,~1=0
取相反数
例:102即:01100110=10011001十进制为:153
左移运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
例:40 = 10<< 2将a的二进制位左移2位,右补0
10=00001010左移俩位=00101000=10
注意:左移1位后a = a *2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。即:a<<n ,若ad的二进制舍弃不包含1,则 a=a*n次方
右移运算符(>>)
将一个运算对象的各二进制位全部右移若干位(右边的二进制位丢弃,,正数左补0,负数左补1)
例:2 = 10>> 2将a的二进制位左移2位,右补0
10=00001010左移俩位=00000010=2
注意:操作数每右移一位,相当于该数除以2
左补0 or 补1得看被移数是正还是负
补码
正数:原码=反码=补码
[+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
负数:
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如:如果是8位二进制:
[+1]原= 0000 0001
[-1]原= 1000 0001
第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)
[1111 1111 , 0111 1111]
即
[-127 , 127]
负数的反码是在其原码的基础上,符号位不变,其余各个位取反
[-1] = [1000 0001]原= [1111 1110]反
负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)
[-1] = [10000001]原= [11111110]反= [11111111]补
标签:11111111,01100110,运算,二进制位,左移,异或,按位 From: https://www.cnblogs.com/lqh969696/p/17101210.html