質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ドキュメント

ドキュメントは、IT用語では、ソフトウェアやハードウェアに関する情報であり、意図された目的、機能性、メインテナンスを含みます。ドキュメントは、多くの様々なフォームとフォーマットに存在しますが、その目的は常に教育することにあります。

Q&A

解決済

3回答

1181閲覧

マイクロソフトドキュメントの単項算術演算子 -

abustoy

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ドキュメント

ドキュメントは、IT用語では、ソフトウェアやハードウェアに関する情報であり、意図された目的、機能性、メインテナンスを含みます。ドキュメントは、多くの様々なフォームとフォーマットに存在しますが、その目的は常に教育することにあります。

0グッド

0クリップ

投稿2021/07/29 06:47

編集2021/07/29 06:53

マイクロソフトドキュメント
https://docs.microsoft.com/ja-jp/cpp/c-language/unary-arithmetic-operators?view=msvc-160
に「算術否定演算子は、オペランドの負数 (2 の補数) を生成します。 オペランドは整数値または浮動小数点値である必要があります。」と記述がありましたが、この記述は正しいですか?
私は「処理系によっては算術否定演算子は2の補数を生成しないのではないか」と思いました。

この質問をした背景には"新明解C言語入門編 柴田望洋" 186ページの記述「符号付き整数の内部表現は、処理系によって異なります。」、及び、以下のソースコード内に書いた疑問があります。

該当のソースコード

C言語

1// 前提 私の処理系では「符号つき整数の内部表現は1の補数表現を使っている」とします。また、sizeof(int)..4とします 2 3# include <stdio.h> 4# define LINE "12345678901234567890123456789012\n" 5 6int main(void) 7{ 8 9unsigned int a=3; 10printf(LINE); 11printf("00000000000000000000000000000011..aの内部ビット\n"); 12// aの内部ビット 00000000000000000000000000000011 13int b=-3; 14printf("11111111111111111111111111111100..bの内部ビット\n"); 15// bの内部ビット 11111111111111111111111111111100 16// 符号つき整数の内部表現は1の補数表現を使っている 17a=-a; 18printf("11111111111111111111111111111101..aの内部ビット\n"); 19// aの内部ビット 11111111111111111111111111111101 20// 「算術否定演算子は、オペランドの負数 (2 の補数) を生成します。 オペランドは整数値または浮動小数点値である必要があります。」が正しいなら、aの内部ビットは2の補数表現が使われているはず 21 22// このとき、aの内部ビットとbの内部ビットは異なっていますが、このことに疑問(そんなことある?)を感じました 23 24return 0; 25} 26

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

cygwinでgccコンパイラを使っています。
算術否定演算子-の定義だったり、とても詳しい説明だったりをご存知の方がおりましたら、サイトへのリンクでも構いませんのでどうか教えていただきです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abustoy

2021/07/29 07:03

ご指摘ありがとうございます。私の質問の根本的なところに私の誤解がありました。
guest

回答3

0

C++20規格に対応するC/C++コンパイラ
またはC2x(2023年予定)規格に限れば正しいです。

投稿2021/07/29 08:38

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/07/29 08:40

実例がほぼなかったのでしょうね…>1の補数や符号+絶対値
asm

2021/07/29 08:42

最大値と最小値の絶対値が同じになるのは便利ですけど +0と-0があるのは…考えたくないですね
guest

0

それはMicrosoft Visual C++という、まさに特定の処理系のドキュメントなので、正しいですか?という質問には「そりゃマイクロソフトが自分の製品について言っているのだからそうなのでしょう」としか言えませんね。

投稿2021/07/29 06:55

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abustoy

2021/07/29 07:02

ご回答ありがとうございます。くどい聞き方で申し訳ないのですが、「Microsoft Visual C++という処理系では、算術否定演算子は、オペランドの負数 (2 の補数) を生成する」という理解で正しいでしょうか?
guest

0

ベストアンサー

たんに、世の中には、負数の表現を2の補数表現、ではない処理系も存在する、というだけのはなしです。

そのドキュメントはあくまでMicrosoftのCコンパイラでの表現に関していってるものですわな。

投稿2021/07/29 06:54

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abustoy

2021/07/29 06:59

ご回答ありがとうございます。私は見当違いの質問をしたのだと思いました。くどい聞き方で申し訳ないのですが、「MicrosoftのCコンパイラにおいては、算術否定演算子はオペランドの負数 (2 の補数) を生成する」という理解で正しいでしょうか?
y_waiwai

2021/07/29 07:03

そういうことです。 まあ、いまどきはそういうヘンタイな処理系は淘汰されて、2の補数ではない処理系、ってのはみなくなりましたね
abustoy

2021/07/29 07:05

ご回答ありがとうございます。このままだと、答えのない疑問を持ち続けるところだったので、とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問