第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何檢查整數(shù)是偶數(shù)還是奇數(shù)?

如何檢查整數(shù)是偶數(shù)還是奇數(shù)?

C
慕俠2389804 2019-08-30 14:41:24
如何在C中檢查給定數(shù)字是偶數(shù)還是奇數(shù)?
查看完整描述

3 回答

?
12345678_0001

TA貢獻1802條經(jīng)驗 獲得超5個贊

使用modulo(%)運算符檢查除以2時是否有余數(shù):


if (x % 2) { /* x is odd */ }

有幾個人批評我上面的回答說明使用x&1是“更快”或“更有效”。我不相信這是事實。


出于好奇,我創(chuàng)建了兩個簡單的測試用例程序:


/* modulo.c */

#include <stdio.h>


int main(void)

{

    int x;

    for (x = 0; x < 10; x++)

        if (x % 2)

            printf("%d is odd\n", x);

    return 0;

}


/* and.c */

#include <stdio.h>


int main(void)

{

    int x;

    for (x = 0; x < 10; x++)

        if (x & 1)

            printf("%d is odd\n", x);

    return 0;

}

然后我用gcc 4.1.3在我的一臺機器上編譯了5次不同的時間:


沒有優(yōu)化標(biāo)志。

用-O

隨著-Os

用-O2

使用-O3

我檢查了每個編譯的匯編輸出(使用gcc -S),發(fā)現(xiàn)在每種情況下,and.c和modulo.c的輸出都是相同的(它們都使用了andl $ 1,%eax指令)。我懷疑這是一個“新”功能,我懷疑它可以追溯到古代版本。我也懷疑任何現(xiàn)代(在過去20年制造)非神秘的編譯器,商業(yè)或開源,缺乏這樣的優(yōu)化。我會測試其他編譯器,但目前我還沒有。


如果其他人愿意測試其他編譯器和/或平臺目標(biāo),并得到不同的結(jié)果,我會非常有興趣知道。


最后,無論實現(xiàn)的有符號整數(shù)的表示如何,標(biāo)準(zhǔn)都保證模數(shù)版本能夠工作,無論整數(shù)是正數(shù),負數(shù)還是零。按位和版本不是。是的,我意識到兩個補碼有點無處不在,所以這不是一個真正的問題。


查看完整回答
反對 回復(fù) 2019-08-30
?
慕運維8079593

TA貢獻1876條經(jīng)驗 獲得超5個贊

你們是waaaaaaaay太高效了。你真正想要的是:


public boolean isOdd(int num) {

  int i = 0;

  boolean odd = false;


  while (i != num) {

    odd = !odd;

    i = i + 1;

  }


  return odd;

}

重復(fù)一遍isEven。


當(dāng)然,這對負數(shù)不起作用。但憑借輝煌而犧牲......


查看完整回答
反對 回復(fù) 2019-08-30
?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

使用位算術(shù):


if((x & 1) == 0)

    printf("EVEN!\n");

else

    printf("ODD!\n");

這比使用除法或模數(shù)更快。


查看完整回答
反對 回復(fù) 2019-08-30
  • 3 回答
  • 0 關(guān)注
  • 510 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號