深入计算机系统-练习题2.44 补码运算

int x = foo(); //任意值

int y = bar(); //任意值

unsigned ux =x;

unsigned uy = y;

证明对于所有的x和y值,它都为真(等于1);

或者2)给出使得它为假(等于0)的x和y的值。

1)x+y == uy+ux

答:这个等式成立,首先这个比较是在位级运算层面的比较。补码和无符号加法有相同的位级行为,也就是从位级层面来看,它们是完全相同的。

2)x*~y + uy*ux == -x

很显然,这也是位级层面的比较。既然已知x+y == uy+ux,不妨把整个等式统一成补码的角度来看。即x*~y + y*x == -x;然后~y=-y-1,这样等式就成立了。

举个例子 y=5, 假设w=4,即位长为4位,则y的二进制补码表示为0101;

-y=-5,其补码表示为1011;

-y-1,其补码表示为1010;

~y 是按位取反运算 表示为 1010;

可以发现~y=-y-1;

原文地址:https://www.cnblogs.com/grooovvve/p/10325897.html

时间: 2024-11-04 15:52:39

深入计算机系统-练习题2.44 补码运算的相关文章

补码运算溢出判断方法

溢出判断方法一 用Xf和Yf表示被加数和加数补码的符号位,Zf为补码和的符号位.当出现Xf = Yf= 0两数同为正,而Zf为负,即Zf=1时,有上溢.当出现Xf =Yf = 1两数同为负,而Zf为正,即Zf= 0时,有下溢. 溢出判断方法二 当数值最高位有进位位C1=1,符号位没有进位C0=0时,或当数值最高位没有进位位C1=0,符号位有进位C0=1时,结果有溢出. 溢出判断方法三: 用变形补码进行双符号位运算.在变形补码中,正数符号以"00"表示,负数的符号以"11&qu

计算机系统的一些常识---补码

补码: 原码:也叫符号绝对值码 最高位0表示正 1表示负,其余二进制位是该数字的绝对值的二进制位 原码简单易懂 加减乘除运算,增加了CPU的复杂度 零的表示不唯一 反码:反码运算不便,也没有在计算机中应用: 移码 :表示数值平移N位,N称为移码量,主要用于浮点数的阶码存储 补码: 十进制转二进制 正整数转二进制 除2取余,直至商为零,余数倒序排序 负整数转二进制 先求与该负数相对应的正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补一 零转二进制 全零 已知二进制求十进制补码 如

深入理解计算机系统 练习题2.25-隐式强制类型转换导致的数组越界

1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 5 float sum_elements(float a[], unsigned length) { 6 int i; 7 float result = 0; 8 cout << length << endl; 9 cout << length - 1 << endl; 10 for (i = 0;

补码运算。

一.补码加法. 先求出两个数的补码. 补码相加. 最后的结果为补码,若要取得真值需再次求补. 超过模的进位需丢掉. 二.补码减法. 三.溢出检测 原文地址:https://www.cnblogs.com/Ravenzzz/p/10930014.html

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

补码的运算

在计算机系统中,数据的表示与存储都是以0或1的形式,而表示这些0或1,我们可以将外部数据通过数字电路进行编码,对于有符号数,在计算机系统中有三种编码,即我们通常所了解的编码:原码,反码,补码,而无符号数没有原码,反码,补码之分,况且,我觉得在计算机存储系统领域讨论无符号数是没什么意义的 原码: 正数原码 = 0 + 正数绝对值 负数原码 = 1 + 负数绝对值 例如: +20的原码:00010100 - 20的原码:10010100 反码: 正数反码 = 正数原码 负数反码 = 负数原码符号位的

java原码,反码,补码 位运算

原码是什么?反码是什么?补码是什么? 原码:正数:正数转换为二进制位就是这个正数的原码负数:负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码 int 2 原码: 00000000 00000000 00000000 00000010 int -2 原码:10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011 # 3原码10000000 00000000 00000000 00000011 # -3原

《深入理解计算机系统》第四周学习笔记

一.知识点总结 1.信息存储 练习题2.4 0x503c+0x8=0x5044 0x503c-0x40=0x4ffc 0x503c+64=0x503c+0x40=0x507c 0x50ea-0x503c=0xae 1)字长:指明整数和指针数据的标称大小.一个字长为w的机器的虚拟地址范围为0~2^(w-1),程序最多访问2^w个字节 int .char 4字节,单精度float 字节,双精度double 8字节 2)小端法:最低有效字节在最前面的顺序存储 大端法:最高有效字节在最前面的顺序存储 练

位运算常用操作总结位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运

来源:http://www.educity.cn/wenda/381487.html 位运算常用操作总结位运算应用口诀 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形.     2 " $amp;     3 "$amp;>amp;>quot;$右移:右边的位被挤掉.对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统.     4 "