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とは同じなのになんで結果は違いますか?
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であるからです。
# つまりは正確では無い,ということ。
お探しの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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
関数とビット列
C言語・C++・C#
-
0xffffとは?
C言語・C++・C#
-
ソース内の行末に\\
C言語・C++・C#
-
-
4
ポインター引数の関数でコンパイルエラーが出る。
C言語・C++・C#
-
5
float?数字の後にLがつくもの
C言語・C++・C#
-
6
C++のfor文について
C言語・C++・C#
-
7
セル内の一部の文字だけをハイパーリンクに設定したい
Excel(エクセル)
-
8
C言語 b += a ? 1 : 0; の意味
C言語・C++・C#
-
9
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
10
ビープ音が鳴りません・・・
C言語・C++・C#
-
11
unsigned long long 型のフォーマット指定子
C言語・C++・C#
-
12
return 1L
C言語・C++・C#
-
13
IG、ACC、+B、ILL
国産バイク
-
14
「#undef」と「#define」の使い方について
C言語・C++・C#
-
15
C言語、C+、C++、C#の違い
その他(パソコン・スマホ・電化製品)
-
16
バッチファイル 二つ上のディレクトリのパス取得
その他(プログラミング・Web制作)
-
17
8ビットのデータの、先頭ビットの呼び方って
その他(プログラミング・Web制作)
-
18
整数から16進数への変換 現在c言語を勉強しています。uint8_t型で宣言した変数に代入した整数を
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進数 加算 減算 C言語
-
O(n log n)について2
-
三菱シーケンサ(Aシリーズ)で...
-
EXCELの関数"STDEV(標準偏差)"...
-
浮動小数点数を10進表記するア...
-
ExcelでPC(パソコン)によって...
-
Excel VBAでの数値の計算につい...
-
floatの有効桁数
-
C言語プログラミングにて、arct...
-
三角比の俯角の計算
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
パソコンで階乗を計算
-
c languageで 簡単な質問があ...
-
ftoa関数の作成
-
時刻の比較
-
VBAでの割り算の余りの求め方
-
ExcelのINT関数の計算結果がお...
-
0.1の10000回の累積
-
4096bitを95種類で表現すると何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
除算を使わずに10で割りたい。
-
C言語プログラミングにて、arct...
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
255の2の補数、B'00000001'が-...
-
変換指定子%22-16gの表示...
おすすめ情報