为什么计算机中一个数的相反数是这个数取反再加1
来源:互联网 发布:mac修图软件 编辑:程序博客网 时间:2024/05/16 07:49
以32位PC机中整形数值(int)为例:
在32位PC机中,数字以二进制方式存储,能够表示的最大的数为4G-1(2的32次方减1,转化为二进制数也即32位全为1),因为数字4G已经有33位了,最高位为1,剩余32位为0,所以计算机自动去掉最高位的1,只保留后面的32位,即4G = 0。说白了就是一个0~4G的数字循环,每当数字达到4G,就变为0。
所以对于任意一个数字x,x+4G=x。那么x的相反数-x,也应该满足-x = 4G-x = (4G-1)-x+1。因为(4G-1)是一个32位全为1的数字,所以(4G-1)-x的值就等于x取反后的值(不信,就在纸上画画),所以-x = 4G-x = (4G-1)-x+1 = ~b+1。
对于有符号的整数也同样适用,不信,你就推算一下。(有符号整数的最高位是一个标志位,表示正负;实际表示数字的位数只有31位)
- 为什么计算机中一个数的相反数是这个数取反再加1
- 求一个数的相反数的补码
- 求一个数的相反数算法
- 怎么样快速得到一个数的相反数
- 一组数中如果只有一个数是1个,其他数是3个,找出这个数?
- 2.数组a[N]中,随机存放了1至N-1的数,再加入一个数,这个数和之前的n-1其中某个数重复。写一个函数,找出被重复的数字.时间复杂度必须为o(N
- 计算机中char型数为什么表示的是-128————127
- 如果1000001个数中,有一个是重复的,如何找出这个数。
- 十万个为什么 —— 为什么一个数的 0 次方只能是 1
- JAVA--第2周实验--用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数
- 给出101个整数数,这101个数是1~100中的数,其中只有一个是出现两次的数,要求找出这个数。
- 一个整数,加上100是个完全平方数,再加168,又是一个完全平方数。
- C++中一个空类的大小为什么是1
- C++中一个空类的大小为什么是1?
- 数据库某个字段是1,2,3形式存储,传入一个数字,如果这个数组有这个值,修改这个字段,去掉和传入一样的数
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- CF574A优先队列是一个数加上另外一些数,使这个数在这些数中最大
- 1-100之间的数在数组a[99]中,有一个数没在其中,找出这个数
- Solr高亮的配置参数说明
- 终于粗略地把Thinking In Java看完了一遍了
- 负数的取模运算
- 【无限互联】2012年10月编程语言排行榜:Dart 首次进入 Top 50
- Cipher Lock Zoj
- 为什么计算机中一个数的相反数是这个数取反再加1
- 如何提高沟通能力
- MySQL小结
- iOS平台XML解析类库对比和安装说明
- 英语练习 60 The elephant and the whale
- Lucene高亮显示内容
- Android 图标拖动效果
- flex动态加载module
- c++——指针专题