!xは論理的な非操作者であり、xがゼロ、0が1になるかどうかについてのみ懸念し、それ以外の場合は0になります。 〜(x)は少し反転演算子であり、xの各バイナリビットを反転させ、0が1に、1は0になりますが、結果には補体計算が含まれる場合があります。
C言語では!x
と~(x)
は異なります。どちらも何らかの「反転」を行っているように見えますが、その効果のビットレベルの詳細は実際には結果とは大きく異なります。これは、真正性にだまされるほど簡単ではありません。
最初にそれについて話しましょう!x
。これは論理的な非オペレーターであり、 x
がゼロかどうかを気にするだけです。 x
がゼロの場合、 !x
1(true)を返します。それ以外の場合、 !x
0(false)を返します。ここで言及したゼロは、ヌルポインターや他の奇妙なことではなく、数値ゼロを指していることに注意してください。このことは、ブール値(またはブール値に暗黙的に変換できる式)に対してのみ理にかなっており、 x
のバイナリ表現はまったく気にしません。
~(x)
を見てみましょう。これはビット反転演算子であり、 x
のすべてのバイナリビットを反転させます。 0は1になり、1は0になります。これは実際の「反転」です。たとえば、 x
が10(バイナリ1010)の場合、 ~(x)
は-11です(2つの補体は、32ビット整数であると仮定して、111111111111111111111111111111111111111111111111110111111111111111111101として表されます)。ご存知のように、結果は完全に異なります。これには、補体表現が含まれ、整数のバイナリ表現とその負の数のバイナリ表現は、逆に追加することによって変換されます。
したがって、変数がゼロかどうかを判断したい場合、 !x
はあなたの良いパートナーです。ただし、変数の各ビットを反転する必要がある場合は、 ~(x)
が選択します。それを台無しにしないでください。これらの2つのものはどちらも感嘆符または波状の線を持っていますが、それらは完全に異なる演算子であり、異なるレベルで作用し、結果は自然に非常に異なります。
パフォーマンスの観点から、 !x
通常~(x)
よりも効率的です。 !x
x
がゼロかどうかを確認する必要があるため、 ~(x)
ビットの操作が必要です。コンパイラは最適化する場合がありますが、原則として!x
計算オーバーヘッドは小さくなっています。
注意すべきポイントがいくつかあります:
-
!x
の戻り値はブール値(0または1)ですが、~(x)
の返品値は整数で、x
と同じタイプです。 - 署名されていない整数の場合、
~(x)
の結果は、このタイプの範囲内の整数のビット反転結果です。署名された整数の場合、結果には補体の計算が含まれ、結果が直感と矛盾するように見える可能性があります。これは、多くの初心者が介入する傾向があるピットです。これらの誤解を避けるために、補体コードの原則を理解する必要があります。
最後に、コードを明確かつ簡単に理解できるように記述する必要があり、いわゆる「簡潔さ」を追求して読みやすさを犠牲にしないでください。適切なオペレーターを選択し、明確なコメントを作成して、コードを理解し、維持しやすくします。これがプログラミングの本当の方法です。
以上が!xはcの〜(x)と同じですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

VScode中怎么配置C语言环境?下面本篇文章给大家介绍一下VScode配置C语言环境的方法(超详细),希望对大家有所帮助!

在C语言中,node是用于定义链表结点的名称,通常在数据结构中用作结点的类型名,语法为“struct Node{...};”;结构和类在定义出名称以后,直接用该名称就可以定义对象,C语言中还存在“Node * a”和“Node* &a”。

c语言将数字转换成字符串的方法:1、ascii码操作,在原数字的基础上加“0x30”,语法“数字+0x30”,会存储数字对应的字符ascii码;2、使用itoa(),可以把整型数转换成字符串,语法“itoa(number1,string,数字);”;3、使用sprintf(),可以能够根据指定的需求,格式化内容,存储至指针指向的字符串。

在c语言中,没有开根号运算符,开根号使用的是内置函数“sqrt()”,使用语法“sqrt(数值x)”;例如“sqrt(4)”,就是对4进行平方根运算,结果为2。sqrt()是c语言内置的开根号运算函数,其运算结果是函数变量的算术平方根;该函数既不能运算负数值,也不能输出虚数结果。

C语言数组初始化的三种方式:1、在定义时直接赋值,语法“数据类型 arrayName[index] = {值};”;2、利用for循环初始化,语法“for (int i=0;i<3;i++) {arr[i] = i;}”;3、使用memset()函数初始化,语法“memset(arr, 0, sizeof(int) * 3)”。

c语言合法标识符的要求是:1、标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成;2、第一个字符必须是字母或下划线,不能是数字;3、标识符中的大小写字母是有区别的,代表不同含义;4、标识符不能是关键字。

c语言编译后生成“.OBJ”的二进制文件(目标文件)。在C语言中,源程序(.c文件)经过编译程序编译之后,会生成一个后缀为“.OBJ”的二进制文件(称为目标文件);最后还要由称为“连接程序”(Link)的软件,把此“.OBJ”文件与c语言提供的各种库函数连接在一起,生成一个后缀“.EXE”的可执行文件。

c语言可以处理的文件类型是:文本文件和二进制文件。C语言所能够处理文件是按照存放形式分为文本文件和二进制文件:1、文本文件存储的是一个ASCII码,文件的内容可以直接进行输入输出;2、二进制文件直接将字符存储,不能将二进制文件的内容直接输出到屏幕上。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック



