#include <string>
#include <stdlib.h>
#include <stdint.h>
#include <algorithm>
/*
79 蟻人間 ◆T6xkBnTXz7B0 2020/12/13(日) 08:24:11.25 ID:zFOj0dh9
お題:
符号なし演算ができない言語X2において、2個の32ビットの符号付き整数x, yがあたえられる。x, yを符号なし整数x', y'と見なしたときの比較演算 x' < y' の値を求めよ。
*/
// uint32 x < y
// 「比較演算 x' < y' の値」はC言語準拠の 0, 1
int32_t i32_cmp( int32_t x, int32_t y )
{
int32_t rval = (0x7FFFFFFF & (x>>1)) - (0x7FFFFFFF & (y>>1));
if( rval == 0 )
rval = (1 & x) - (1 & y);
return ( rval < 0 )? 1 : 0;
}
void test( int32_t n1, int32_t n2 )
{
int ans = (uint32_t) n1 < (uint32_t) n2;
printf( " %11ds %11uu 0x%08X : %11ds %11uu 0x%08X => %d %d : %s\n",
n1, n1, n1,
n2, n2, n2,
ans,
i32_cmp( n1, n2 ),
(ans == i32_cmp( n1, n2 ))? "OK" : "NG"
);
}
int main(void)
{
test( 0, 0 );
test( 0, 1 );
test( 1, 0 );
test( 1, 1 );
test( 123, 123 );
test( 123, 456 );
test( 456, 123 );
test( 456, 456 );
test( 0, -1 );
test( -1, 0 );
test( -1, -1 );
test( 1, -1 );
test( -1, 1 );
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgovKgoKNzkg6J+75Lq66ZaTIOKXhlQ2eGtCblRYejdCMCAyMDIwLzEyLzEzKOaXpSkgMDg6MjQ6MTEuMjUgSUQ6ekZPajBkaDkKICAgIOOBiumhjDoKICAgIOespuWPt+OBquOBl+a8lOeul+OBjOOBp+OBjeOBquOBhOiogOiqnlgy44Gr44GK44GE44Gm44CBMuWAi+OBrjMy44OT44OD44OI44Gu56ym5Y+35LuY44GN5pW05pWweCwgeeOBjOOBguOBn+OBiOOCieOCjOOCi+OAgngsIHnjgpLnrKblj7fjgarjgZfmlbTmlbB4JywgeSfjgajopovjgarjgZfjgZ/jgajjgY3jga7mr5TovIPmvJTnrpcgeCcgPCB5JyDjga7lgKTjgpLmsYLjgoHjgojjgIIKCiovCgovLyB1aW50MzIgeCA8IHkKLy8g44CM5q+U6LyD5ryU566XIHgnIDwgeScg44Gu5YCk44CN44GvQ+iogOiqnua6luaLoOOBriAwLCAxCmludDMyX3QgaTMyX2NtcCggaW50MzJfdCB4LCBpbnQzMl90IHkgKQp7CglpbnQzMl90IHJ2YWwgPSAoMHg3RkZGRkZGRiAmICh4Pj4xKSkgLSAoMHg3RkZGRkZGRiAmICh5Pj4xKSk7CglpZiggcnZhbCA9PSAwICkKCQlydmFsID0gKDEgJiB4KSAtICgxICYgeSk7CglyZXR1cm4gKCBydmFsIDwgMCApPyAxIDogMDsKfQoKdm9pZCB0ZXN0KCBpbnQzMl90IG4xLCBpbnQzMl90IG4yICkKewoJaW50IGFucyA9ICh1aW50MzJfdCkgbjEgPCAodWludDMyX3QpIG4yOwoJcHJpbnRmKCAiICUxMWRzICUxMXV1ICAweCUwOFggIDogICUxMWRzICUxMXV1ICAweCUwOFggID0+ICAlZCAgJWQgOiAlc1xuIiwKCQluMSwgbjEsIG4xLAoJCW4yLCBuMiwgbjIsCgkJYW5zLAoJCWkzMl9jbXAoIG4xLCBuMiApLAoJCShhbnMgPT0gaTMyX2NtcCggbjEsIG4yICkpPyAiT0siIDogIk5HIgoJKTsKfQoKaW50IG1haW4odm9pZCkKewoJdGVzdCggMCwgMCApOwoJdGVzdCggMCwgMSApOwoJdGVzdCggMSwgMCApOwoJdGVzdCggMSwgMSApOwoKCXRlc3QoIDEyMywgMTIzICk7Cgl0ZXN0KCAxMjMsIDQ1NiApOwoJdGVzdCggNDU2LCAxMjMgKTsKCXRlc3QoIDQ1NiwgNDU2ICk7CgoJdGVzdCggIDAsIC0xICk7Cgl0ZXN0KCAtMSwgIDAgKTsKCXRlc3QoIC0xLCAtMSApOwoKCXRlc3QoICAxLCAtMSApOwoJdGVzdCggLTEsICAxICk7CgoJcmV0dXJuIDA7Cn0KCg==