当我需要减去2个数字(X-Y)时,我可以取2的Y补码并将其加到X.假设我们的系统用一个字节(8位)表示整数。
X = 7 = 00000111
Y = 5 = 00000101
2的补充5
11111010 + 1 = 11111011
添加那些2 =
00000111
11111011
__________
100000010
有结转。如何处理这个结转?
如果我使用的是8位,那意味着我的范围是-128到127.所以7和-5及其总和不会超出该范围。所以这不是溢出。
答案 0 :(得分:1)
取决于你想要做什么
如果您只是计算简单/单.config(function($stateProvider, $urlRouterProvider, $authProvider, $ionicAppProvider, API_URL) {
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('land', {
url: '/land',
templateUrl: 'templates/land.html',
controller: 'LandCtrl'
})
.state('signup', {
url: '/sign-up',
templateUrl: 'templates/sign-up.html',
controller: 'SignUpCtrl'
})
.state('signin', {
url: '/sign-in',
templateUrl: 'templates/sign-in.html',
controller: 'SignInCtrl'
})
.state('app.categories', {
url: '/categories',
views: {
'menuContent': {
templateUrl: 'templates/categories.html',
controller: 'categoriesCtrl',
}
}
});
次操作
然后通常忽略溢出
需要处理上溢/下溢时
例如,如果由于某种原因需要钳位结果(通常是结果范围的安全性......),那么如果发生溢出下溢,则 ALU 标记的进位标记。然后,根据输入+/-
和操作sign,magnitude
将结果设置为最大正值或负值。 Aome平台有自动执行此操作的指令(饱和添加,子)。
另一个原因是在这种情况下进行(+,-)
操作将bigint
添加到更高的操作(符号取决于操作)...但结果本身保持不变({{1} })
在现代语言/平台上,您不再拥有直接ALU标志寄存器访问权
有时您可以使用汇编程序,但在某些情况下它可能比计算本身更慢。在这种情况下,请使用此方法32bit ALU in C++,其中+/-1
是进位标记
答案 1 :(得分:0)
应该再次阅读我的教科书:)
在2的补码运算中,与1的补码运算相比,丢弃了残留,其中残差被带回并添加到结果中。
此视频帮助我理解 - https://www.youtube.com/watch?v=lKTsv6iVxV4