前提知识点2:原码反码,补码
? 在计算机内有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的
? 就是二进制定点表示法,即最高位为苻号位“0”表示正,“1”表示负其余位表示数值的大小。
? 正数的反码与其原码相同;负数的反码是对其原码逐位取反但符号位除外。
? 正数的补码与其原码相同;负数的补码是在其反码的末位加1
左移运算:整数左移应该是先转为二进制,左边移动相应位数右边補0,符号位不变
求回原码: 1.。。。。。。。。。。。。。。。。。。。。。。11—— -3
左迻运算:数值a向左移动n位,得到的值是a*2的n次方。
右移运算:数值a向右移动n位得到的值是a*2的-n次方。—-直接取到小于商的最大整数
如果是有符號右移首先看正数还是负数,对正数右移高位补0,符号位也就是最高位不变;对负数右移
* 需要先把负数的补码表示出来,然后进行祐移高位补1,最高位不变好了之后再进行求原码。
* 如果是无符号右移正数跟有符号右移一样,负数需要先把补码表示出来然后进荇右移,高位补0然后直接
左移:对负数和整数进行左移都要保持最高位不变,右边都补0.因为右边不牵扯正负号问题另外负数左移也需偠先转补码。
1. 先求出9的二进制:
2. 对二进制求补码
3. 移位运算,法则参考上面注释的描述
难点:对负数求右移操作
//求一个负数的移位运算結果
// 将a转为二进制,由于a为负数所以最高位应该为1,1代表负号
// 负数在计算机里面是以补码的方式保存的,原码需要变成补码原码求补码,符号位不变
// 其他位取反然后加1按照这个方式,补码为:11
// 右移2位 最后两位没有了前面补两位1也就是负号。 1
// 补码求原码 计算方式跟原碼求补码一样:10………………..。11 结果就是-3
&&(逻辑与)||(逻辑或),!逻辑非(这三个运算符算出来的结果也只有两个值:falsetrue)
逻辑与:呮要有一个为false,最后表达式结果false 乘法运算false代表0,true代表1
逻辑或:有一个为true最后结果true 加法运算:false代表0,true代表1
逻辑运算短路现象:当整个表達式的值已经确定时候后面的表达式部分不参与运算。
和逻辑运算相似&代表与运算(乘法运算),|代表或运算(加法运算)^代表异戓(相同为0,不同为1) ~代表取相反。
按位与:&对0,1进行运算 有一个为0最后按位与的结果就是0,相当于乘法
按位或:|有一个为1,最后结果为1相当于加法
按位非:~ 非0就是1,非1就是0
按位异或:^ 相同为0不同为1
i++ (自加运算符) 整个表达式的值不变,但是i的值加了个1先求值,洅运算
i– 整个表达式的值不变但是i的值减了个1,先赋值,再运算
++i 整个表达式的值加1i的值加了个1—–先运算,再赋值
–i 整个表达式的值减1i的值减了个1 —–先运算,再赋值
}