【初心者歓迎】C/C++室 Ver.82【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.82【環境依存OK】 - 暇つぶし2ch74:デフォルトの名無しさん
13/02/06 15:04:10.77
2で割って足して、先頭bitを確認するとか?
余った分を足すのを忘れないように

75:デフォルトの名無しさん
13/02/06 15:06:27.48
#define isOverflow(x, y) (((x) + (y)) < (x) || ((x) + (y)) < (x))

76:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/02/06 15:20:07.55
>>76
片方だけでいいんちゃう?

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

79:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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
13/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:デフォルトの名無しさん
13/02/06 20:13:44.65
いっそのこと64bitで計算して判定すれば?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch