``` 对于有符号的数而言 二进制数的特点: 1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码、补码、反码都一样【三码合一】 3.负数的原码=反码符号位不变,其他位取反、负数的反码=原码符号位不变,其他位取反【0->1 1->0】 4.负数的补码=反码+1 、负数的反码=补码-1 5. 0的反码和补码都是0 ***6.在计算机运算的时候,都是采用补码的方式来运算【使用补码进行运算可以将正数和负数统一起来】【位运算是通过补码进行运算的,计算机的底层就是这么运算的】 ***7.呈现在用户面前的是原码,最后的位运算结果也是原码 ***8.最高位符号位不计入最终的结果中,只是单纯的表示为符号 对于无符号的数而言:没有负数,都是正数,三码合一 ``` ## 位运算符 & 按位与 “与运算” 两个对应的数都为1 最后结果位1 否则为0 ==>类似 && | 按位或 “或运算” 两个对应的数只要一个为1 最后结果为1 否则为0 ==>类似 || ^ 按位异或 “异或运算” 两个对应的数不相同 最后结果为1 否则为0 ~ 按位取反 “取反运算” 1变0 0变1 << 按位左移运算 将一个运算对象的各二进制位全部左移若干位【左边丢弃 右边补0】 >> 按位右移运算 将一个运算对象的各二进制位全部右移若干位【正数左补0,负数左补1,右边舍弃】 ## 练习 3&2 3的原码:00000000 00000000 00000000 00000011 3的补码:00000000 00000000 00000000 00000011 2的原码:00000000 00000000 00000000 00000010 2的补码:00000000 00000000 00000000 00000010 3的补码:00000000 00000000 00000000 00000011 2的补码:00000000 00000000 00000000 00000010 3&2的补码:00000000 00000000 00000000 00000010 【正数】 3&2的原码:00000000 00000000 00000000 00000010 ==》2 -3|2 -3的原码:10000000 00000000 00000000 00000011 -3的反码:11111111 11111111 11111111 11111100 -3的补码:11111111 11111111 11111111 11111101 2的原码:00000000 00000000 00000000 00000010 2的补码:00000000 00000000 00000000 00000010 -3的补码:11111111 11111111 11111111 11111101 2的补码:00000000 00000000 00000000 00000010 -3|2的补码:11111111 11111111 11111111 11111111 【负数】 -3|2的反码:11111111 11111111 11111111 11111110 -3|2的原码:10000000 00000000 00000000 00000001 ==》-1 ~2==>对2进行取反 *** 作 在位运算中:是对补码进行 *** 作的 又因为正数的三码合一,又因为2是int 占4个字节=32位 2 2的原码:00000000 00000000 00000000 00000010 2的补码:00000000 00000000 00000000 00000010 2的取反:11111111 11111111 11111111 11111101 【补码】【最高位为1 取反的结果为负数】 2取反的反码:11111111 11111111 11111111 11111100 2取反的原码:10000000 00000000 00000000 00000011 ==>原码是显示在电脑上的数:也就是最终的结果:-3 2<<1 2的原码:00000000 00000000 00000000 00000010 2的补码:00000000 00000000 00000000 00000010 2<<1的补码:00000000 00000000 00000000 00000100 【正数】 2<<1的原码:0000000 00000000 00000000 000000100 =>4
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)