java - 8 位二进制补码范围
问题描述
对于使用二进制补码表示来存储有符号整数的 8 位单元,该单元以二进制形式写入的整数范围是多少?
我有 00000000 到 11111111 因为我认为十进制范围是 0 到 -1,但我认为我没有以正确的方式解决问题。
解决方案
对于一种宽度n
位并使用二进制补码编码。
- 最大值为 2 n-1 -1
- 最小值为 2 n-1
所以对于 n = 8。
- 2 n-1 -1 = 128-1 = 127 一个字节的最大有符号值
- 2 n-1 = 128 = -128 一个字节的最小有符号值
或使用位移
1<<7 - 1 = 10000000 = 128 - 1 = 01111111 = 127
1<<7 = 10000000 = 128 = 10000000 = -128
推荐阅读
- ios - React-native:如何从 ios 项目文件夹中复制文件?
- html - 如何更改 WebGL 中的每个像素
- bluetooth - 如何在 bluez5.inc 中添加兼容性 -C
- kubernetes - HPA 缩减未正确发生
- ruby - 如何在 Rails 应用程序中将 Ruby 2.3.1 升级到 2.6.5,并使用工具或 gem 验证兼容性和弃用检查
- python - Tensorflow 2.0 数据集 tensorflow.python.framework.errors_impl.InternalError:无法解析张量原型
- reactjs - react-redux 中的 API 调用,thunk 不起作用
- sql-server - 根据条件更新单列
- c - /usr/bin/ld: 找不到 -lmosquitto
- java - Mongo $sort 是如何工作的?