
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
三菱シーケンサ(Aシリーズ)で...
-
計算の丸め誤差の解消について
-
VB6.0での小数点の扱いについて
-
ExcelでPC(パソコン)によって...
-
EXCELの関数"STDEV(標準偏差)"...
-
16進数とかわからないです
-
距離から緯度経度を求める方法
-
有効数字について 以前質問をし...
-
ExcelのINT関数の計算結果がお...
-
”/”を使わずに割り算したいんで...
-
除算を使わずに10で割りたい。
-
C言語の実数演算の速度は、値に...
-
BCD・HEX・BINについて
-
どんな数字を入力してもaverage...
-
c languageで 簡単な質問があ...
-
2進数データのビット演算
-
16進数 加算 減算 C言語
-
Double型について
-
VB.net Double と...
-
浮動小数点演算を固定小数点演...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelでPC(パソコン)によって...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
VBAでミリ秒まで出力する方法
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
除算を使わずに10で割りたい。
-
計算の丸め誤差の解消について
-
VB6.0での小数点の扱いについて
-
コンピューターは指数関数をど...
-
2038年問題 日付算出
-
時刻の比較
-
2進数、16進数、10進数のことを...
-
浮動小数演算は実行環境の変化...
-
2進数の足し算(C言語)
おすすめ情報