二进制
2015-10-21 15:52
204 查看
原码 1000 0001 (其中第一个1为符号位)
反码 1111 1110 (符号位不变,其余的取反)
补码 1111 1111 (原码取反+1 ,符号位不变) 计算机中一般使用补码表示 因为补码进行+-*/运算后 结果仍为补码
不管是在32还是在64位编译器处理下,int都是4字节32位,所以整数范围是- 2147483648~2147483647。
计算机负数是以其正数的原码的补码形式存储的,则有2147483648=231的原码为10...0(31个0),其反码为01...1(31个1),所以-2147483648表示为补码是反码加1为10...0(31个0)。因此:
1、~i:取反操作,为01...1(31个1),即231-1=2147483647;
2、 -i:相当于求其补码,取反,再加1。取反, 10...0(31个0)-> 01...1(31个1),再加1, 10...0(31个0),该二进制表现出来仍旧为- 2147483648;
3、1-i:即-i加1,因为不会溢出,直接加减法就行(当然二进制加减也不会错只是要注意负数是补码表示的),-2147483648+1=- 2147483647, 其实-2147483647的二进制形式也就是 10...0(31个0)+1= 10...01(30个0);
4、 -1-i:即-i减1,因为会溢出,所以还是要二进制加减,则为 10...0 (31个0)-1= 01...1(31个1),即 2 31-1=2147483647。
反码 1111 1110 (符号位不变,其余的取反)
补码 1111 1111 (原码取反+1 ,符号位不变) 计算机中一般使用补码表示 因为补码进行+-*/运算后 结果仍为补码
不管是在32还是在64位编译器处理下,int都是4字节32位,所以整数范围是- 2147483648~2147483647。
计算机负数是以其正数的原码的补码形式存储的,则有2147483648=231的原码为10...0(31个0),其反码为01...1(31个1),所以-2147483648表示为补码是反码加1为10...0(31个0)。因此:
1、~i:取反操作,为01...1(31个1),即231-1=2147483647;
2、 -i:相当于求其补码,取反,再加1。取反, 10...0(31个0)-> 01...1(31个1),再加1, 10...0(31个0),该二进制表现出来仍旧为- 2147483648;
3、1-i:即-i加1,因为不会溢出,直接加减法就行(当然二进制加减也不会错只是要注意负数是补码表示的),-2147483648+1=- 2147483647, 其实-2147483647的二进制形式也就是 10...0(31个0)+1= 10...01(30个0);
4、 -1-i:即-i减1,因为会溢出,所以还是要二进制加减,则为 10...0 (31个0)-1= 01...1(31个1),即 2 31-1=2147483647。
相关文章推荐
- mysql binlog二进制日志详解
- 详解C++编程中对二进制文件的读写操作
- 整理C# 二进制,十进制,十六进制 互转
- c#二进制逆序方法详解
- JS幻想 读取二进制文件第1/2页
- 使用jscript实现二进制读写脚本代码
- C#二进制序列化实例分析
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
- javascript 二进制运算技巧解析
- 如何判断一个整数的二进制中有多少个1
- MSSQL 将截断字符串或二进制数据问题的解决方法
- 二进制中1的个数
- C++ 十进制转换为二进制的实例代码
- C语言十进制转二进制代码实例
- C++二进制翻转实例分析
- PowerShell把IP地址转换成二进制的方法
- 科学知识:二进制、八进制、十进制、十六进制转换
- C#读取二进制文件方法分析
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
- php图片的二进制转换实现方法