c++缩小转换的时候int变量赋值给char变量重输出时为什么是32?
巴扎黑
巴扎黑 2017-04-17 13:08:09
0
2
584
巴扎黑
巴扎黑

全員に返信(2)
伊谢尔伦

转换的时候不会全部放1,注意下面
这是 2000 的二进制表示 ‭0100 1110 0010 0000‬
在缩短到 1 bytechar 后,应该是保留后面的 0010 0000‬ , 而这个数十进制表示就是 32

いいねを押す +0
Ty80

首先你需要去看一本叫D&E的书. 再者, 这个锅应该摔给C语言.
C++在设计的时候就想要去兼容C语言, 所以char和int之间的隐式转换(没有任何编译错误警告)是C带来的. 而一个大于char最大值的int, 转化成char时, 这个行为应该是未定义行为. 具体就不要深究了, 你只需要知道这样写代码是不对的.

PS:
楼上给你的解释, 只是一个特定编译器下的实现, 站在未定义行为的角度看, 不管任何编译器怎么实现, 他都是合法的.
我记得以前写程序用移位操作, 当时并不太清楚用有符号整数会出现什么后果, 结果后来程序在gcc下面跑的很好, 在vc下面就是不行. 直到后来看书, 后来所有的位运算都用uint32_t或者unint64_t.

The value of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a non-negative value, the value of the result is the integral part of the quotient of E1/2E2. If E1 has a signed type and a negative value, the resulting value is implementation-defined.

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート