原码反码补码以及移位按位与或异或等位操作的实例
来源:互联网 发布:淘宝上的国大药房 编辑:程序博客网 时间:2024/05/22 16:44
实例全部来自C和指针课后习题,英文版p123 - 124可见
主要是看到bitwise以及shift运算,在做习题的过程中顺便复习了原码反码以及补码的运算,也清除了很多知识的盲点,比如一个二进制负数如何变成十进制等。
在32位的机器下,已知int a = 10, b = -25;求下列位运算。
a是正数,原码,反码,补码都一样
00000000 00000000 00000000 00001010
b是负数,最高位是符号位,反码是除符号位其他取反,补码是反码加1
原码
10000000 00000000 00000000 00011001
反码
11111111 11111111 11111111 11100110
补码
11111111 11111111 11111111 11100111
下面开始计算。
a << 2
00000000 00000000 00000000 00001010(a原来的值)
左移之后
00000000 00000000 00000000 00101000
转化成十进制为40
b >> 3
11111111 11111111 11111111 11100111(b原来的值)
右移之后
11111111 11111111 11111111 11111100
若要计算十进制,除了符号位其他取反结果再加1
取反的结果
10000000 00000000 00000000 00000011
加1
10000000 00000000 00000000 00000100
转化成十进制为-4
a & b
a 00000000 00000000 00000000 00001010
b 11111111 11111111 11111111 11100111
结果00000000 00000000 00000000 00000010
转化为十进制为2
a ^ b
a 00000000 00000000 00000000 00001010
b 11111111 11111111 11111111 11100111
结果11111111 11111111 11111111 11101101
若要计算十进制,除了符号位其他取反结果再加1
取反的结果
10000000 00000000 00000000 00010010
加1
10000000 00000000 00000000 00010011
转化成十进制为-19
a | b
a 00000000 00000000 00000000 00001010
b 11111111 11111111 11111111 11100111
结果11111111 11111111 11111111 11101111
若要计算十进制,除了符号位其他取反结果再加1
取反的结果
10000000 00000000 00000000 00010000
加1
10000000 00000000 00000000 00010001
转化成十进制为-17
~b
b 11111111 11111111 11111111 11100111
结果00000000 00000000 00000000 00011000
转化成十进制为24
b >> a - 4
由于- 优先级大于 >>
b >> (10 - 4)
b 11111111 11111111 11111111 11100111
结果11111111 11111111 11111111 11111111
若要计算十进制,除了符号位其他取反结果再加1
取反的结果
10000000 00000000 00000000 00000000
加1
10000000 00000000 00000000 00000001
转化成十进制为-1
a & 0x1 == b & 0x1
由于 == 的优先级大于 &
a & 0 & 0x1
结果为0
a | b << a & b
由于 << 的优先级大于 & 大于| (a =10,b = -25)
所以顺序为a | ((b << a) & b)
求法同上最后转化为十进制为-25590
- 原码反码补码以及移位按位与或异或等位操作的实例
- 位运算: 与”&、“非”~、“或||”、“异或”^ ;原码 反码 补码的相互转化
- 原码、反码、补码,以及负数的位操作
- 5、位运算符、按位与、按位或、按位非、左移、右移、原码、反码、补码
- 内存中原码,反码,补码,查看数值范围,&,或,异或,取反,左右移位操作
- 原码、反码、补码及移位操作
- 原码, 反码, 补码 详解以及负数的按位与运算
- 原码、反码、补码、负数的移位
- 原码,补码,反码与位运算
- 补码、原码、反码-移位操作 编解码
- 原码,反码,补码 及 移位运算
- 1,Java的移位操作效果; 2,移位如何实施的; 3, 原码补码反码原理
- 原码补码反码以及位运算符
- java的原码,反码与补码
- 计算机的原码,反码与补码
- 原码、反码、补码以及补码是怎么来的
- 计算机中的位操作、补码、反码、原码
- 原码、补码、运算(加减、异或)实例
- 理解递归神经网络(RNN)的展开
- 关于LeetCode中Intersection of Two Arrays II一题的理解
- php zip文件的解压与压缩
- 【java项目实践】在eclipse中使用利用mybatis-generator自动生成Model、Dao、mapping代码
- Linux(Ubuntu)下 升级安装JDK1.7
- 原码反码补码以及移位按位与或异或等位操作的实例
- apk更新代码
- 工厂模式
- linux下write操作原理、错误原因及处理方法
- C#中的正则表达式
- JAVA中int、String的类型转换
- 基于 HTTP/2 的 APNs 协议:Universal Push Notification Client SSL 证书
- tomcat集群机制剖析及其生产部署选型
- JS原生获取对象的所有属性-函数包装