二进制常用运算方式和基本概念

本文深入探讨了二进制逻辑运算,包括逻辑与、或、异或和取反,并举例说明其运算规则。此外,详细解释了二进制的原码、补码和反码的概念,特别是在负数表示中的应用。最后,介绍了二进制的左移和右移运算,包括无符号右移,解析了它们在数值计算中的影响。
摘要由CSDN通过智能技术生成

二进制逻辑运算

1.逻辑与运算

运算符(&)
运算规则:对于两个二进制数的与运算,只有当他们同一位的数字同为1时才为1,否则取0。相当于数学与的同真为真。
示例:10100
11111
结果:10100

2.逻辑或运算

运算符(|)
运算规则:对于两个二进制数的或运算,一位任意一方的数字为1就取1,当同一位双方都为0时才取0。相当于数学的同假为假。
示例:10100
11101
结果:11101

3.逻辑异或运算

运算符(^)
运算规则:对于两个二进制数的异或运算,一位的双方都同为0或者同为1则该位取0,不同取1。
示例:10100
11010
结果:01110

3.逻辑取反运算

运算符(~)
运算规则:对于一个二进制数,所有的位1取0,0取1。
示例:10100
结果:01011

二进制的原码,补码和反码

首先需要清楚数字在计算机中的存储方式,以Java举例。
我们都知道在Java中int的取值范围为-2^31— 2^31-1
为什么呢,首先int在Java中定义是4个字节长度,每个字节8bit位那么0在Java中内存的表现形式就是
00000000 00000000 00000000 00000000
但是实际上最高位需要用来表示该int数的正负是符号位,那么int的最大值和最小值的二进制表示形式就是
最大值:01111111 11111111 11111111 11111111
最小值:11111111 11111111 11111111 11111111
那么这样看int的最小值也应该是-2^31 +1才对,但是实际上却是-2^31,这是因为对于0来说,他的符号位是无意义的,由此产生了
00000000 00000000 00000000 00000000
10000000 00000000 00000000 00000000
对于负数0用它是没有意义的,因此使用负数0来存储-2^31这个负数最大数。
同时计算机中规定,正数用原码表示,负数用补码表示。

1.二进制的原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
用实际数来举个例子(默认使用4位的二进制位)

十进制原数原码
10001
-11001
20010
-21010
30011
-31011

2.二进制的补码

正整数的补码是其二进制表示,与原码相同。求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
还是看下例子

十进制原数补码
10001
-11111
20010
-21110
30011
-31101

3.二进制的反码

将一个二进制数中的1变为0、0变为1以后所得的数。
例子

十进制原数反码
10110
-11110
20101
-21101
30100
-31100

来看一下这几个数的集合

十进制原数原码反码补码
1000101100001
-1100111101111
2001001010010
-2101011011110
3001101000011
-3101111001101

二进制的移位运算

1.二进制的左移

左移运算符是一个计算机用语。用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。
符号:<<
计算规则:将二进制数向左移动,右边补0。
示例:0011(3)<<1
结果:0110(6)
结论:对于高位没有溢出的二进制数来说,左移n位相当于原数乘以2^n。

2.二进制的右移

右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补符号位。
符号:>>
计算规则:将二进制数向右移动,左边补符号位
示例:0011(3)>>1 1101(-3的补码,在计算机中负数用补码表示)>>1
结果:0001(1) 1110(-2)
结论:右移n位相当于原数除以2^n丢失的最位数含1的情况下要根据实际情况向上向下取整

1.二进制的无符号右移

右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0
符号:>>>
计算规则:将二进制数向右移动,左边补0
示例:0011(3)>>>1 1101(-3的补码,在计算机中负数用补码表示)>>>1
结果:0001(1) 0110(6)
结论:正数右移和普通右移一致,负数和其在计算机中的存储位数有关。
如Java中的-3
11111111 11111111 11111111 1111101 >>2
00111111 11111111 11111111 1111111
变成了1073741823

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值