亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么使用模數時C ++輸出負數?

為什么使用模數時C ++輸出負數?

C++
qq_笑_17 2019-10-31 14:09:14
數學:如果您有這樣的方程式:x = 3 mod 7x可以是... -4、3、10、17 ...或更一般地:x = 3 + k * 7其中k可以是任何整數。我不知道為數學定義了模運算,但是因子環當然是。Python:在Python中,%與正數一起使用時,您總是會得到非負值m:#!/usr/bin/python# -*- coding: utf-8 -*-m = 7for i in xrange(-8, 10 + 1):    print(i % 7)結果是:6    0    1    2    3    4    5    6    0    1    2    3    4    5    6    0    1    2    3C ++:#include <iostream>using namespace std;int main(){    int m = 7;    for(int i=-8; i <= 10; i++) {        cout << (i % m) << endl;    }    return 0;}將輸出:-1    0    -6    -5    -4    -3    -2    -1    0    1    2    3    4    5    6    0    1    2    3    ISO / IEC 14882:2003(E)-5.6乘法運算符:二進制/操作員產生的商,和二進制%操作者產生了由第二所述第一表達的除法的余數。如果/或%的第二個操作數為零,則行為不確定。否則(a / b)* b + a%b等于a。如果兩個操作數均為非負數,則其余為非負數;如果不是,則其余的符號由實現定義74)。和74)根據對ISO C進行修訂的工作,整數除法的首選算法遵循ISO Fortran標準ISO / IEC 1539:1991中定義的規則,其中商總是四舍五入。資料來源:ISO / IEC 14882:2003(E)(我找不到的免費版本ISO/IEC 1539:1991。有人知道從何處獲得它嗎?)該操作似乎是這樣定義的:在此處輸入圖片說明問題:這樣定義它是否有意義?此規范的參數是什么?制定這樣的標準的人是否有討論的地方?在哪里可以閱讀有關他們決定采用這種方式的原因的一些信息?在大多數情況下,當我使用模數時,我想訪問數據結構的元素。在這種情況下,我必須確保mod返回一個非負值。因此,對于這種情況,最好始終將mod返回非負值。(另一種用法是歐幾里得算法。由于在使用此算法之前可以使兩個數字均為正數,所以取模的符號很重要。)附加材料:有關不同語言的模運算的詳細列表,請參見Wikipedia。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

在x86(和其他處理器體系結構)上,整數除法和模是通過單個操作idivdiv對于無符號值)執行的,該操作會產生商和余數(分別針對in AX和in的字長參數DX)。C庫函數中使用了該函數divmod,編譯器可以將其優化為單個指令!

整數除法遵守兩個規則:

  • 非整數商將舍入為零;和

  • dividend = quotient*divisor + remainder結果滿足了方程式。

因此,當將負數除以正數時,商將為負(或零)。

因此,這種行為可以看作是一系列本地決策的結果:

  • 處理器指令集設計針對較普通情況(模)優化了普通情況(除法);

  • 一致性(四舍五入并遵守除法方程)比數學正確性更可?。?/p>

  • C更喜歡效率并且要簡單(特別是傾向于將C視為“高級匯編程序”);和

  • C ++更喜歡與C兼容。


查看完整回答
反對 回復 2019-10-31
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

此規范的參數是什么?


C ++的設計目標之一是有效地映射到硬件。如果底層硬件以產生負余數的方式實現除法,那么這就是%在C ++中使用時得到的結果。真的就是全部。


制定這樣的標準的人是否有討論的地方?


您將在comp.lang.c ++。moderated上找到有趣的討論,并在較小程度上找到comp.lang.c ++


查看完整回答
反對 回復 2019-10-31
  • 3 回答
  • 0 關注
  • 749 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號