有符号数值类型的最大值加1为什么是其最小值?
来源:互联网 发布:剑三淘宝买金怎么输 编辑:程序博客网 时间:2024/04/30 02:35
请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/71170170
下面以C语言中char为例子:
都知道其无符号取值范围是0~2^8也就是0~255。原因很简单,其二进制为8位,最大值自然是1111 1111,转换为10进制:1*2^0+1*2^1+1*2^2+1*2^3+1*2^4+1*2^5+1*2^6+1*2^7=255。
那么如果是有符号char呢?按照规定有符号数值的最高为表示符号位,1为负数,0为正数。1111 1111则为:-(1*2^0+1*2^1+1*2^2+1*2^3+1*2^4+1*2^5+1*2^6)= -127,随便说一点有符号char的最小值的-128,其二进制是按理应该是1 1000 0000,但是char最多八位,所以舍弃最高位。其二进制为 1000 0000,这个值其实恰好表示-0,因为没有-0这个数所以不冲突,不会影响计算。
回归问题,有符号数值类型加1为什么是最小值?
有符号 char最大值:
0111 1111
+10000 0001
----------------------------
1000 0000
上面也说了,1000 0000表示 -128,这种规律适用于其他的有符号数据类型。
顺便记录下与负数的加减:
计算机存储数值形数据都是以补码储存的,正数反码补码都是其原码,负数反码为其原码除了符号位其余取反,补码是其原码的补码加1。运算的时候也是通过补码进行运算的。如-3+1:-3的原码为1000 0011,反码为:1111 1100,补码为:1111 1101,1原码、反码、补码都是 0000 0001;
-3+1:
1111 1101
+0000 0001
----------------------------------
1111 1110
1111 1110取其补码为:1000 0010 ,转10进制为-2;
- 有符号数值类型的最大值加1为什么是其最小值?
- 为什么最大值加一等于最小值
- int型数值的最大值和最小值
- 编写函数,其功能是求3个整数的最大值和最小值
- C++类型的最小值和最大值
- C#类型最大值,最小值
- 分别显示用float和double指数记数法所能表示的最大值和最小值 以一个最高有效位为1的二进制数字开始,用有符号右移操作符对其进行右移,直至所有二进制位都被移除为止,每移一位都要使用Integer
- 计算机原理-w位无符号和有符号位数最大值和最小值公式
- 符号表支持优先队列的最大值和最小值删除
- 0<0x80000000与0x80000000是32位有符号整型最小值的随记
- 判断类型是无符号类型还是有符号类型
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- 为什么8位有符号数的范围为“-128 — +127”?(转载加补充)
- 为什么8位有符号数的范围为“-128 — +127”?(转载加补充)
- laravel5.3学习资料
- 学习css布局
- 网站robots.txt文件
- ref与out使用区别探究
- Linux根文件系统介绍[转载]
- 有符号数值类型的最大值加1为什么是其最小值?
- opencv cv2.THRESH_OTSU 二值化
- 宽带上网中,radius登录的端口绑定的意义
- N皇后问题(位运算)
- System.getProperty()
- LeetCode 12.Integer to Roman
- Spark 内存管理之Tungsten
- Android Fragment的生命周期
- react-native-storage