二进制的原码、反码、补码和程序超出整型限制时的运算
来源:互联网 发布:双代号网络计划规则 编辑:程序博客网 时间:2024/05/22 14:21
1.二进制的原码、反码和补码运算
原码表示法:原码表示法是机器数的一种简单表示法。其符号位用0表示正数,用1表示负数,数值一般用二进制形式表示。原码在进行加减法运算时,符号位不能直接参与运算,而是要分别计算符号位和数值位。当数字为正数时,直接进行二进制运算;当数字为负数时,要转换成补码进行运算。得到的结果为正数,则为最后结果,如果为负数,则符号位不变,进行减1,取反操作,得到最后结果。
(1)正数:二进制原码、反码和补码都相同,为原码形式。
(2)负数:原码为它的二进制数,反码为原码的符号位不变,其余各位取反,补码为其反码在最低位加1。
例1:当机器字长为8位二进制数时,进行加法运算5+3。
因两数都为正数,直接采用原码形式进行运算
5的原码:0000 0101
3的原码:0000 0011
5+3:0000 0101+0000 0011=0000 1000=8
例2:当机器字长为8位二进制数时,进行减法运算-5-3。
因存在负数参与运算,所以要取负数的补码进行运算
-5的原码:1000 0101,反码:1111 1010,补码:1111 1011
-3的原码:1000 0011,反码:1111 1100,补码:1111 1101
-5-3=(-5)+(-3):1111 1011+1111 1101=1111 1000,其中所得结果为负数,要保持符号位不变,进行减1取反操作,得到
最后结果,为1000 1000,即-8。
2.程序超过整型限制时的运算
整型大致分为有符号和无符号两种,无符号整型的优点是可以增大变量能够存储的最大值。
例:
#include <iostream>#include <climits>int main(){using namespace std;short int signed_flag = SHRT_MAX;unsigned short int unsigned_flag = SHRT_MAX;signed_flag = signed_flag + 1;unsigned_flag = unsigned_flag + 1;cout << "signed_flag = " << signed_flag << endl;cout << "unsigned_flag = " << unsigned_flag << endl;signed_flag = 0;unsigned_flag = 0;signed_flag = signed_flag - 1;unsigned_flag = unsigned_flag - 1;cout << "signed_flag = " << signed_flag << endl;cout << "unsigned_flag = " << unsigned_flag << endl;}
运行结果:
注:在此系统上,short int 最大值为32767。对于有符号 short int 来说,当为最大值时,加1超过了限制,其值将变为范围的另一端;对于无符号 short int 来说,当为0时,减1超过了限制,其值也将变为范围的另一端。
- 二进制的原码、反码、补码和程序超出整型限制时的运算
- 十进制和二进制的转化;原码、反码和补码
- 原码、反码、补码之间的转换和简单运算
- java语言基础(6)——原码反码补码以及二进制的负数运算
- 原码、反码和补码的实现
- 原码,反码和补码的关系
- 计算机的原码、反码和补码
- 负数的原码反码和补码
- 计算机的原码, 反码和补码
- 计算机的原码, 反码和补码
- 计算机的原码, 反码和补码.
- 计算机的原码, 反码和补码
- 数的二进制表示——原码、反码、补码
- 计算机中二进制原码、反码、补码的计算
- 二进制转换(负数的原码,反码,补码)
- 位运算和原码,反码,补码
- 二进制原码、反码、补码
- 二进制原码、反码、补码
- easyUI学习笔记-----combogrid
- Fibonacci Check-up 矩阵快速幂
- QT之涂鸦板实现
- 数据中心间网络SDN解决思路探讨
- VC6.0的正确打开方式
- 二进制的原码、反码、补码和程序超出整型限制时的运算
- 润乾报表通过js清除钻取后url
- Post与Get方式提交乱码问题解决
- 全国市一级城市列表
- php取上月(上周,上上周,本周)日期
- 【u116】最短路计数
- Linux
- javascript 清除字符串空格
- Mac下安装pip报错