前提・実現したいこと
私の処理系ではint型は4バイトです。
ソースコードにコメントとして質問を記述させていただいております。
/質問1 上の2行の違いについて考えた以下の記述は正しいですか?
まず、-aというのはunsigned int型aに単項演算子-を作用させているのでaの値は4294967293である。よって、上の行はunsigned int型xに値4294967293を代入することを表している。
対して、下の行はunsigned int型yに値-3を代入している。unsigned int型yに負の値を代入しているので、yの値は4294967293である。/
質問1ですが、書いていることがとても分かりづらいと思いますので、恐縮ですが意味の分からないところがあればお聞きください。
/質問2 下の3行のうち3行目のみ未定義の動作になると思うのですが正しいですか?(1行目と2行目は4294967293に変換指定子uを指定しているが、3行目は負の値-3に変換指定子uを指定していると思いました。)/
該当のソースコード
c
1#include <stdio.h> 2 3int main(void) 4{ 5 unsigned int a=3; 6 7 8 unsigned int x=-a; 9 unsigned int y=-3; 10 /*質問1 上の2行の違いについて考えた以下の記述は正しいですか? 11 まず、-aというのはunsigned int型aに単項演算子-を作用させているのでaの値は4294967293である。よって、上の行はunsigned int型xに値4294967293を代入することを表している。 12 対して、下の行はunsigned int型yに値-3を代入している。unsigned int型yに負の値を代入しているので、yの値は4294967293である。*/ 13 14 15 /*質問2 下の3行のうち3行目のみ未定義の動作になると思うのですが正しいですか?(1行目と2行目は4294967293に変換指定子uを指定しているが、3行目は負の値-3に変換指定子uを指定していると思いました。)*/ 16 printf("%u\n",x); 17 printf("%u\n",-a); 18 printf("%u\n",-3); 19 20 21 22 return 0; 23}
補足情報(FW/ツールのバージョンなど)
cygwinでgccコンパイラを使っております。
回答2件
あなたの回答
tips
プレビュー