[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 02/07 11:19 / Filesize : 18 KB / Number-of Response : 83
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.82【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2013/02/04(月) 05:42:06.64 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.81【環境依存OK】
toro.2ch.net/test/read.cgi/tech/1354116880/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

NG推奨:半角にして登録してくだい
◆QZaw55cn4c
/tech/1313183984/

40 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 08:30:15.26 ]
>>27
依存するのなら面倒がらずに sizeof で記述する、でも
書き捨てならとりあえずほとんどの環境で
32bit: sizeof(int)=sizeof(long)=32 と覚えておくとよい
ほとんどの環境で 64bit: sizeof(int)=32, sizeof(long)=64 なのには違和観を覚えてしまうが、なぜこうなってしまったのだろう?

boolean が 1bit なのは自明、short はそのつど sizeof している

41 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 08:51:24.04 ]
釣りはよそでやってね

42 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 09:48:41.91 ]
だいたいで量を決めるって根拠が薄いんだけどな。演習だからとかそういうことではなく、自分が決めなくちゃ
いかんことを決められないって話。

43 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 11:15:49.38 ]
booleanとか無いし、boolのことなら「最低限真偽値を表現できるサイズ以上」でしかない
VC++でもバージョンによって4Byteだったり1Byteだったりするし、そんな○型だから○Byteとか覚えるものではない

どうしてもサイズを完全に指定したいなら、処理系に依存したビットサイズ指定の型でも使えば楽なんじゃないか?

44 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 12:28:33.22 ]
typedef して word, dword, とかね。

45 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:17:44.22 ]
codepad.org/BoeeHL03

このコードって何をやっているのでしょうか?
頭が悪すぎて、この関数がどういう処理をしているのか理解できません。
どなたか、コメントつけて解説してくれませんか?

46 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:18:37.17 ]
WORDとかDWORDとか使うぐらいならshortとかlongとか使うわ

47 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 13:51:38.71 ]
>>45
機械語なら俺に質問しろ!その2
toro.2ch.net/test/read.cgi/tech/1356735624/
アセンブラ 13
toro.2ch.net/test/read.cgi/tech/1314512680/

辺りで聞いたほうがいいと思う

48 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 14:03:11.38 ]
まず何の機種のものなのかを書かないとね〜
機種関係なく、コードの流れとして結果何をやっているかだったら応えられるが



49 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 15:11:17.65 ]
>>47
ありがとうございます。
ひょっとして、スレチでしょうか?
ソースコードがないので逆アセンブルした物を元にCで書き直しました。

codepad.org/Mwek5qUR

出力が110C8531C00・・・となっています。
110C8531D00 = 123456780 (32進数)に近いので、32進数的な何かだと思うのですが。

50 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 16:36:42.48 ]
ただ、逆汗しても、何もわからないでしょう
それが、何するものなのか、わからないと...

51 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 18:35:41.82 ]
>>46
いや、その short とか long が環境によって違うので、ラップして好きにかえられるように、と。

52 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 18:59:47.49 ]
>>51
手抜きのつもりが#ifのネストですごいことになるんだよな

53 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 20:02:45.52 ]
>>40
釣りすぎる

54 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 20:34:44.48 ]
>>53
し、しまった、8で割るのをわすれてしまった‥‥

55 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:17:08.51 ]
>>54
そういうレベルの問題ではないんだが・・・

56 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:25:52.25 ]
そうそう、もっと根本的な日本語のレベルの問題

>違和観

なんだこれ

57 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:40:27.32 ]
そういう低レベルな話じゃないから

58 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:43:17.67 ]
>>55
ideone.com/UlZ9uF
sizeof(bool) は 1 でしたね。
あとなにを間違えているのでしょうか?



59 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 21:51:43.84 ]
64-bit 環境では
VCは sizeof(long) == 4 で
gccは sizeof(long) == 8

ほとんどの環境でlongが64-bitとか噴飯もの

60 名前:デフォルトの名無しさん [2013/02/05(火) 23:13:46.65 ]
longでも環境によって違うってマジかよwwwww
俺のソフトがやばい
あ、それってコンパイル環境のこと?実行環境のこと?

61 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:20:38.87 ]
実行環境で変わるわけないだろ

62 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:24:39.91 ]
だからbit数保証したいならtypedef使えと・・・

stdint.h があるならそれ使うといいが
ない環境を考えるなら自前で定義だな

63 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:41:33.21 ]
C言語でintが64bitでないのは64bit環境ではない

64 名前:デフォルトの名無しさん mailto:sage [2013/02/05(火) 23:48:59.40 ]
マヌケはレスする資格無し

65 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 02:50:48.25 ]
long long と勘違いしているのに 100 ペリカ

66 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 07:54:49.94 ]
solarisだよ。ううん知らないけど

67 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:11:05.92 ]
unsigned int 同士の足し算で桁あふれ検知したいんだけど
キャストなしで先に検知する方法あるかな

68 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:13:03.69 ]
レジスタ見ればいいんじゃね



69 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:29:17.54 ]
unsigned x,y;
unsigned msk=0xffff; // 32bit
unsigned w=(x&msk)+(y&msk);
unsigned u=(x>> 16)+(y>> 16)+(w>> 16);
if (u>> 16){ ・・・// OF

やっぱフラグレジスタ見れ

70 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:30:18.96 ]
>>61
サンクス
じゃあ安心だ

71 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 13:34:46.37 ]
int8_t, int16_t, int32_t, int_32_t とか使えばいいんじゃ

72 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 14:22:03.12 ]
>>67
x86でVC++ならこんな風にできるけど、ちょっとなあ・・・

unsigned int a = 0x80000001;
unsigned int b = 0x80000002;
unsigned int sum;
bool overflow;

sum = a + b;
__asm
{
  jc OF
  mov [overflow], 0
  jmp END_OF
OF:
  mov [overflow], 1
END_OF:
}

// sum == 3, overflow = true

73 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 14:25:16.18 ]
>>67
ttp://ideone.com/UypVGL

あまり美しくないけど

74 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:04:10.77 ]
2で割って足して、先頭bitを確認するとか?
余った分を足すのを忘れないように

75 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:06:27.48 ]
#define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))

76 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:07:51.80 ]
>>75
間違った
×> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))
○> #define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (y))

77 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:20:07.55 ]
>>76
片方だけでいいんちゃう?

78 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:27:34.92 ]
#define isOverflow(x, y) (~(x) < (y) )
これでいいか



79 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:29:41.18 ]
>>77
#define isOverflow(x, y) (((x) + (y)) < (x))
だけでいいね

>>74
#define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
かな

80 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 15:37:39.60 ]
uint32_t
isOverfloow(uint32_t x,uint32_t y)
{
uint32_t z;
uint32_t a;
a=x%2+y%2;
a/=2;
z=x/2+y/2;
z+=a;
return z&0x80000000;
}

81 名前:79 mailto:sage [2013/02/06(水) 15:52:30.85 ]
>>80
ああ、そうだった。
ということで>>79
×> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1) >= (1 << (sizeof(unsigned int) * 8 - 1)))
○> #define isOverflow(x, y) (((x) >> 1) + ((y) >> 1) + ((((x) & 1) + ((y) & 1)) >> 1)) & (1 << (sizeof(unsigned int) * 8 - 1))

82 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 20:13:44.65 ]
いっそのこと64bitで計算して判定すれば?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<18KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef