【发布时间】:2019-05-30 10:36:03
【问题描述】:
C 标准是怎么说的:
uint32_t a = 0x11223344;
uint16_t b = a;
打印时,我得到 0x3344,这是有道理的;所以这一定是合法且正确的行为吗?
【问题讨论】:
-
这是合法正确的行为。port70.net/~nsz/c/c11/n1570.html#6.3.1.3
-
你的意思是把
32分配给16! -
这是正确的做法,但获得合理的结果并不能证明这一点
-
从程序在一种情况下产生所需输出这一事实推断它是合法且正确的是不正确的。接受程序正确性的正确方法是了解适用的规则(例如编译器和语言规范)并检查程序是否符合这些规则。当然,尝试实际执行是非常宝贵的,但理解规则也是如此。
标签: c types type-conversion integer unsigned-integer