#include <iostream>
#include <stdint.h>
#include <climits>
template <typename T>
class Num {
public:
inline Num (T src) : val (src) {}
T val;
};
template <typename T> Num<T> inline operator * (Num<T> a, Num<T> b) { return ( static_cast<T> (a.val * b.val) ); }
template <typename T> Num<T> inline operator / (Num<T> a, Num<T> b) { return ( static_cast<T> (a.val / b.val) ); }
template <typename T> Num<T> inline operator + (Num<T> a, Num<T> b) { return ( static_cast<T> (a.val + b.val) ); }
template <typename T> Num<T> inline operator - (Num<T> a, Num<T> b) { return ( static_cast<T> (a.val - b.val) ); }
template <typename T> Num<T> inline operator % (Num<T> a, Num<T> b) { return ( static_cast<T> (a.val % b.val) ); }
int main () {
typedef Num<uint16_t> N16;
typedef Num<uint32_t> N32;
N16 res16 = (N16 ( 1000 ) * N16 ( 1000 )) / N16 ( 100 );
N32 res32 = (N32 ( 1000 ) * N32 ( 1000 )) / N32 ( 100 );
std::cout << "16bit Rechnung: " << res16.val << '\n'
<< "32bit Rechnung: " << res32.val << '\n'
<< "Diese Plattform hat " << (sizeof(int) * CHAR_BIT) << "bit \"int\", "
<< (sizeof(long) * CHAR_BIT) << "bit \"long\", "
<< (sizeof(void*) * CHAR_BIT) << "bit Adressraum.\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxjbGltaXRzPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIE51bSB7CglwdWJsaWM6CgkJaW5saW5lIE51bSAoVCBzcmMpIDogdmFsIChzcmMpIHt9CgkJCgkJVCB2YWw7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gIE51bTxUPiBpbmxpbmUgb3BlcmF0b3IgKiAoTnVtPFQ+IGEsIE51bTxUPiBiKSB7IHJldHVybiAoIHN0YXRpY19jYXN0PFQ+IChhLnZhbCAqIGIudmFsKSApOyB9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiAgTnVtPFQ+IGlubGluZSBvcGVyYXRvciAvIChOdW08VD4gYSwgTnVtPFQ+IGIpIHsgcmV0dXJuICggc3RhdGljX2Nhc3Q8VD4gKGEudmFsIC8gYi52YWwpICk7IH0KdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ICBOdW08VD4gaW5saW5lIG9wZXJhdG9yICsgKE51bTxUPiBhLCBOdW08VD4gYikgeyByZXR1cm4gKCBzdGF0aWNfY2FzdDxUPiAoYS52YWwgKyBiLnZhbCkgKTsgfQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gIE51bTxUPiBpbmxpbmUgb3BlcmF0b3IgLSAoTnVtPFQ+IGEsIE51bTxUPiBiKSB7IHJldHVybiAoIHN0YXRpY19jYXN0PFQ+IChhLnZhbCAtIGIudmFsKSApOyB9CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiAgTnVtPFQ+IGlubGluZSBvcGVyYXRvciAlIChOdW08VD4gYSwgTnVtPFQ+IGIpIHsgcmV0dXJuICggc3RhdGljX2Nhc3Q8VD4gKGEudmFsICUgYi52YWwpICk7IH0KCmludCBtYWluICgpIHsKCXR5cGVkZWYgTnVtPHVpbnQxNl90PiBOMTY7Cgl0eXBlZGVmIE51bTx1aW50MzJfdD4gTjMyOwoJTjE2IHJlczE2ID0gKE4xNiAoIDEwMDAgKSAqIE4xNiAoIDEwMDAgKSkgLyBOMTYgKCAxMDAgKTsKCU4zMiByZXMzMiA9IChOMzIgKCAxMDAwICkgKiBOMzIgKCAxMDAwICkpIC8gTjMyICggMTAwICk7CgkKCXN0ZDo6Y291dAk8PCAiMTZiaXQgUmVjaG51bmc6ICIgPDwgcmVzMTYudmFsIDw8ICdcbicKCQkJCTw8ICIzMmJpdCBSZWNobnVuZzogIiA8PCByZXMzMi52YWwgPDwgJ1xuJwoJCQkJPDwgIkRpZXNlIFBsYXR0Zm9ybSBoYXQgIgk8PCAoc2l6ZW9mKGludCkgKiBDSEFSX0JJVCkgPDwgImJpdCBcImludFwiLCAiCgkJCQkJCQkJCQkJPDwgKHNpemVvZihsb25nKSAqIENIQVJfQklUKSA8PCAiYml0IFwibG9uZ1wiLCAiCgkJCQkJCQkJCQkJPDwgKHNpemVvZih2b2lkKikgKiBDSEFSX0JJVCkgPDwgImJpdCBBZHJlc3NyYXVtLlxuIjsKCQoJcmV0dXJuIDA7Cn0=