
No.3ベストアンサー
- 回答日時:
補足への回答になります。
1uと1は「型が違う」という大きな違いがあります。
内部のビット表現がどうこうではなく,「型が違う」ところにCの処理での大きな違いが出てきます。
# 個人的には内部表現なんて最初から気にするような性質の物では無いと思っています。
まず,-1と1uを比較している場合ですが,
・-1はint型,1uはunsigned int型なのでinteger conversion rankは等しい
・int型とunsigned int型の演算なので,int型はunsigned int型に変換される
・値をunsigned int型に変換するには,(UINT_MAX + 1)に相当する値を加算または減算し続けることで行われる
ことが,規格 (ISO/IEC 9899:1999) で決まっています。
具体的には,6.3 Conversions - 6.3.1 Arithmetic operandsの,
6.3.1.1 Boolean, characters, and integers
および
6.3.1.8 Usual arithmetic conversions
になります。
さて,計算が面倒なのでUINT_MAXが65535の処理系を考えると,
if (a < 1u)
は,
if (-1 < 1u)
と等価であり,さらに,
if ((unsigned int)(-1 + (UINT_MAX + 1UL)) < 1u)
と等価となり,つまりは
if (65535u < 1u)
と等価になります。よって,ifの中は偽になり,Falseが表示されます。
次に,(3 < -2u)ですが,まず,-2uについて,
・値をunsigned int型に変換するには,(UINT_MAX + 1)に相当する値を加算または減算し続けることで行われる
が適用されます。
-2uは(unsigned int)(-2 + (UINT_MAX + 1UL))に相当し,先の例では65534uになります。
次に,3はそのまま3uになります (表現できるので)。
if (3 < -2u)
は
if (3u < 65534u)
と等価となります。このifの中は真ですから,printf("Large : %d\n", -2U);が処理されます。
ここで-2と表示されますと書かないのは,-2Uという「unsigned int」の値を%dに渡しているため,
厳密にはundefined behaviorであるからです。
# つまりは正確では無い,ということ。
No.2
- 回答日時:
そのアルファベットは「接尾語」と呼ばれるもので、定数の型を指定しています。
整数にUまたはuを付けると unsigned になります。
他にlongを表わす L, 実数型でfloatを表わす F等があります。
ところで、このプログラムの動作は理解できていますか?
uの有無で結果が変わるはずです。
その理由を理解できますか? (おそらく、そのための例題かと思われます)
この回答への補足
unsigned charは 0~256
charは -127~127までですよね
何で-1が1より小さいんですか?
-1は 1111 1111
1uは 0000 0001
こんな意味ですか?
でも1uと1とは同じなのになんで結果は違いますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
ExcelのINT関数の計算結果がお...
-
O(n log n)について2
-
8・16進数の引き算を教えてくだ...
-
整数のべき数のプログラムについて
-
BCD・HEX・BINについて
-
fortranで図形の面積を求めるに...
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
C言語の型による処理速度の違い
-
正の数aは4の倍数で、7でわると...
-
(C言語)めちゃくちゃな値にな...
-
なぜ、C++の標準ヘッダをインク...
-
2曲同時再生するにはどうした...
-
C言語の二分法のプログラムにつ...
-
c++でテンプレートのコードでわ...
-
【C++】関数ポインタの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
MATLABでの行列の全要素の和
-
除算を使わずに10で割りたい。
-
floatの有効桁数
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
Fortran において変数の定義
-
計算の丸め誤差の解消について
-
C言語について質問です。
-
CRCの計算方法について
おすすめ情報