二进制算术 - 加溢出

时间:2015-07-08 03:52:15

标签: math binary addition

当我需要减去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及其总和不会超出该范围。所以这不是溢出。

2 个答案:

答案 0 :(得分:1)

取决于你想要做什么

  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', } } }); 次操作

    然后通常忽略溢出

  2. 需要处理上溢/下溢时

    例如,如果由于某种原因需要钳位结果(通常是结果范围的安全性......),那么如果发生溢出下溢,则 ALU 标记的进位标记。然后,根据输入+/-和操作sign,magnitude将结果设置为最大正值或负值。 Aome平台有自动执行此操作的指令(饱和添加,子)。

    另一个原因是在这种情况下进行(+,-)操作将bigint添加到更高的操作(符号取决于操作)...但结果本身保持不变({{1} })

  3. 在现代语言/平台上,您不再拥有直接ALU标志寄存器访问权

    有时您可以使用汇编程序,但在某些情况下它可能比计算本身更慢。在这种情况下,请使用此方法32bit ALU in C++,其中+/-1是进位标记

答案 1 :(得分:0)

应该再次阅读我的教科书:)

在2的补码运算中,与1的补码运算相比,丢弃了残留,其中残差被带回并添加到结果中。

此视频帮助我理解 - https://www.youtube.com/watch?v=lKTsv6iVxV4