Cの>>> =演算子とは何ですか?

CustomCalc:

同僚からパズルとして与えられたので、このCプログラムが実際にコンパイルされて実行される方法を理解できません。この>>>=演算子と奇妙な1P1リテラルは何ですか?ClangとGCCでテストしました。警告はなく、出力は "???"です。

#include <stdio.h>

int main()
{
    int a[2]={ 10, 1 };

    while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )
        printf("?");

    return 0;
}
イルマリ・カロネン:

この線:

while( a[ 0xFULL?'\0':-1:>>>=a<:!!0X.1P1 ] )

とにそれぞれ変換されるダイグラフ :>が含まれているため、次と同等です。<:][

while( a[ 0xFULL?'\0':-1 ] >>= a[ !!0X.1P1 ] )

リテラル0xFULL0xF(と16進数15と同じです。ULLそれがunsigned long longリテラルであることを指定してますいずれの場合でも、ブール値としてはtrueであるため、に0xFULL ? '\0' : -1評価されます'\0'。これは、数値が単にである文字リテラルです0

一方、0X.1P1あるリテラル進浮動小数点 2/16 = 0.125に等しいです。いずれの場合も、ゼロ以外であり、ブール値としても真であるため、!!再度2回否定するとが生成され1ます。したがって、全体が次のように簡略化されます。

while( a[0] >>= a[1] )

演算子>>=は、左側のオペランドを右側のオペランドで指定されたビット数だけ右にビットシフトし、結果を返す複合代入です。この場合、右側のオペランドa[1]の値1常になので、次と同等です。

while( a[0] >>= 1 )

または、同等に:

while( a[0] /= 2 )

の初期値a[0]は10です。一度右にシフトすると、5、次に(切り捨て)2、1、最後に0になり、ループが終了します。したがって、ループ本体は3回実行されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++の<=>演算子とは何ですか?

分類Dev

C ++の演算子「」とは何ですか?

分類Dev

C ++の演算子「」とは何ですか?

分類Dev

C ++の「->」演算子とは何ですか?

分類Dev

C ++の「<?=」演算子とは何ですか?

分類Dev

Javaの/ =演算子とは何ですか?

分類Dev

golangの「&^」演算子とは何ですか?

分類Dev

Scalaの=!=演算子とは何ですか?

分類Dev

Scalaの=!=演算子とは何ですか?

分類Dev

Scalaの=!=演算子とは何ですか?

分類Dev

JavaScriptの `>>>`演算子とは何ですか?

分類Dev

JavaScriptの<>演算子とは何ですか?

分類Dev

何ですか?と?? javascriptの演算子は?

分類Dev

空の演算子とは何ですか?

分類Dev

HTMLの「:」演算子とは何ですか?

分類Dev

JavaScriptの!==演算子とは何ですか?

分類Dev

JavaScriptの%演算子とは何ですか?

分類Dev

Javaの演算子>>と演算子>>>の違いは何ですか?

分類Dev

SQLのNOT演算子と!=演算子の違いは何ですか?

分類Dev

Swiftの&<<演算子と<<演算子の違いは何ですか?

分類Dev

IN演算子とMEMBER OF JPQL演算子の違いは何ですか?

分類Dev

:=演算子と=演算子の違いは何ですか?

分類Dev

Javaのequals()とC ++の演算子==の違いは何ですか?

分類Dev

C / C ++の「->」演算子とは何ですか?

分類Dev

RxJSでは、interval演算子とtimeInterval演算子の違いは何ですか?

分類Dev

Pythonの「in」演算子に相当するC ++とは何ですか?

分類Dev

Pythonの「in」演算子に相当するC ++とは何ですか?

分類Dev

ggplot2の「+」演算子とmagrittrの「%>%」演算子の違いは何ですか?

分類Dev

`numpy`の` slice`(:)演算子と `ellipsis`(...)演算子の違いは何ですか?

Related 関連記事

  1. 1

    C ++の<=>演算子とは何ですか?

  2. 2

    C ++の演算子「」とは何ですか?

  3. 3

    C ++の演算子「」とは何ですか?

  4. 4

    C ++の「->」演算子とは何ですか?

  5. 5

    C ++の「<?=」演算子とは何ですか?

  6. 6

    Javaの/ =演算子とは何ですか?

  7. 7

    golangの「&^」演算子とは何ですか?

  8. 8

    Scalaの=!=演算子とは何ですか?

  9. 9

    Scalaの=!=演算子とは何ですか?

  10. 10

    Scalaの=!=演算子とは何ですか?

  11. 11

    JavaScriptの `>>>`演算子とは何ですか?

  12. 12

    JavaScriptの<>演算子とは何ですか?

  13. 13

    何ですか?と?? javascriptの演算子は?

  14. 14

    空の演算子とは何ですか?

  15. 15

    HTMLの「:」演算子とは何ですか?

  16. 16

    JavaScriptの!==演算子とは何ですか?

  17. 17

    JavaScriptの%演算子とは何ですか?

  18. 18

    Javaの演算子>>と演算子>>>の違いは何ですか?

  19. 19

    SQLのNOT演算子と!=演算子の違いは何ですか?

  20. 20

    Swiftの&<<演算子と<<演算子の違いは何ですか?

  21. 21

    IN演算子とMEMBER OF JPQL演算子の違いは何ですか?

  22. 22

    :=演算子と=演算子の違いは何ですか?

  23. 23

    Javaのequals()とC ++の演算子==の違いは何ですか?

  24. 24

    C / C ++の「->」演算子とは何ですか?

  25. 25

    RxJSでは、interval演算子とtimeInterval演算子の違いは何ですか?

  26. 26

    Pythonの「in」演算子に相当するC ++とは何ですか?

  27. 27

    Pythonの「in」演算子に相当するC ++とは何ですか?

  28. 28

    ggplot2の「+」演算子とmagrittrの「%>%」演算子の違いは何ですか?

  29. 29

    `numpy`の` slice`(:)演算子と `ellipsis`(...)演算子の違いは何ですか?

ホットタグ

アーカイブ