c言語-型の最大値最小値-

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: c言語-型の最大値最小値-

Re: c言語-型の最大値最小値-

#5

by ユーマ » 5年前

かずまさんありがとうございます!
初期化をするのを忘れていたんですね..恥ずかしい;;
c1 = 0x7fなど初期化してから実行すると思った通りに動きました!
longも処理系によっては大きさが違ったりするんですね...
ありがとうございました!

Re: c言語-型の最大値最小値-

#4

by かずま » 5年前

かずま さんが書きました:
5年前
char c1 = 0; とするか、または c1 = 07f; としましょう。
c1 = 0x7f; ですね。

それから、処理系によっては long が 64ビットのこともありますよ。

Re: c言語-型の最大値最小値-

#3

by かずま » 5年前

ユーマ さんが書きました:
5年前

コード:

int main(void){
	char c1;
	
	c1 |= 0x7f;
自分はなにかとんでもなく変なことをしているのでしょうか?
なぜこうなるかお分かりの方がいらっしゃいましたらよろしくお願いいたします。
未初期化変数の値を使って計算をしています。
char c1 = 0; とするか、または c1 = 07f; としましょう。

Re: c言語-型の最大値最小値-

#2

by ユーマ » 5年前

すみません。質問者です。追加の情報失礼します。
型だけではsignedかunsignedか環境によって変わって来るらしいので追記しました。

コード:

	signed char c1;
	unsigned char c2;
	signed short s1;
	unsigned short s2;
	signed int i1;
	unsigned int i2;
	signed long l1;
	unsigned long l2;

c言語-型の最大値最小値-

#1

by ユーマ » 5年前

こんにちは。
型の最大値や最小値を求めるプログラムを書いていたところ、分岐などはしていないのにも関わらず出力が変化する
という現象が発生したので質問させていただきました。

環境は
Ubuntu 18.04.1 LTS
(GNU Binutils for Ubuntu) 2.30 です。

コード:

#include<stdio.h>

int main(void){
	char c1;
	unsigned char c2;
	short s1;
	unsigned short s2;
	int i1;
	unsigned int i2;
	long l1;
	unsigned long l2;

	c1 |= 0x7f;
	printf("MAX_char = %d\n", c1);
	c1 = ~c1;
	printf("MIN_char = %d\n", c1);

	c2 |= 0xff;
	printf("MAX_Uchar = %d\n", c2);
	c2 = ~c2;
	printf("MIN_Uchar = %d\n", c2);

	s1 |= 0x7fff;
	printf("MAX_short = %d\n", s1);
	s1 = ~s1;
	printf("MIN_short = %d\n", s1);

	s2 |= 0xffff;
	printf("MAX_Ushort = %d\n", s2);
	s2 = ~s2;
	printf("MIN_Ushort = %d\n", s2);

	i1 |= 0x7fffffff;
	printf("MAX_int = %d\n", i1);
	i1 = ~i1;
	printf("MAX_int = %d\n", i1);

	l1 |= 0x7fffffff;
	printf("MAX_long = %ld\n", l1);
	l1 = ~l1;
	printf("MIN_long = %ld\n", l1);

	return 0;
}
このようなプログラムなんですが、
gcc test.c -o test (test.cがこのプログラム)
./test
で実行すると毎回結果が変わります。

実行結果をのせます。
MAX_char = 127
MIN_char = -128
MAX_Uchar = 255
MIN_Uchar = 0
MAX_short = 32767
MIN_short = -32768
MAX_Ushort = 65535
MIN_Ushort = 0
MAX_int = -1
MAX_int = 0
MAX_long = 2147483647
MIN_long = -2147483648
ここではintに関しては思うように動いていませんがもう一度実行すると
MAX_char = 127
MIN_char = -128
MAX_Uchar = 255
MIN_Uchar = 0
MAX_short = 32767
MIN_short = -32768
MAX_Ushort = 65535
MIN_Ushort = 0
MAX_int = 2147483647
MAX_int = -2147483648
MAX_long = 2147483647
MIN_long = -2147483648
と意図した結果になることになることもあります。

ほかにもcharのところも値がぶれます。

自分はなにかとんでもなく変なことをしているのでしょうか?
なぜこうなるかお分かりの方がいらっしゃいましたらよろしくお願いいたします。

ページトップ