关于有符号和无符号整数
- 简介
- 1. 运算规则
- 2. 减法时注意
- 3. 换算时
- 4. 溢出问题
- 5. 关于计算机是怎么区分二者
简介
有符号数就是取第一位二进制为符号位置0是代表整数,1是代表负数;
无符号整数则是全部二进制都代表相应的数据位;无符号数是从0开始的,没有负数;
如拿8位二进制来说:
1111 1111 无符号数的表示范围为0~255
而有符号数的表示范围是-128~127;
易错混淆:
1. 运算规则
在计算机内部整数都是以补码的形式储存的,有符号数和无符号数在计算机里表示都是一样的,二进制的补码形式。同时不管是无符号整数还是有符号整数的运算规则都是一样,得到的结果都是一样的,之所以运行输出的结果不一样,是因为编译器翻译的规则不一样,这也是由于因为二者的定义不一样。
2. 减法时注意
当做x-y的运算时,我们知道计算机内执行的是[x]补+[-y]补的运算,注意这里有一个混淆点,求[-y]补时,是将y的二进制全部取反后加一,而求负数的补码时是符号位不变将剩余位取法加一,笔者当时就是这里没注意然后就有点搞不清了,嘿嘿。
3. 换算时
二者转换也就很简单了,值是一样的,就根据二者的规则将结果算出来就行了,比如1100 1111当它为有符号整数时是换算成十进制是表示为-49,当为无符号整数时是表示207;
如上图代码,有符号整数下5-10=-5,-5在计算机内是以1111 1111 1111 1111 1111 1111 1111 1011的形式储存,对应无符号数就是4294967291。
4. 溢出问题
关于溢出,无符号数则是看进位标志位;
无符号数溢出判断:
其实很简单,就一句话:
当最高为向更高位有进位(或借位)时产生溢出
有符号数则是溢出标志位;
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。
当Xf =Yf =0(两数同为正),而Zf=1(结果为负)时,负溢出;
当出现Xf =Yf =1(两数同为负),而Zf=0(结果为正),正溢出.
5. 关于计算机是怎么区分二者
计算机也是根据一些标志位区分二者;就像前面的进位标志位类似;
最后啦啦啦
看到这里希望对你有所帮助