Kar*_*yan 5 c++ binary signed char
我的问题是关于 Stroustrup 的书 C++ 编程语言,第 4 版中的一段。他举了一个例子
char c = 255; // 255 is ‘‘all ones,’ ’ hexadecimal 0xFF
int i = c;
Run Code Online (Sandbox Code Playgroud)
并解释如何在 char 有符号或无符号的机器上转换。
i 的值是多少?不幸的是,答案是不确定的。在具有 8 位字节的实现中,答案取决于扩展为 int 时“全为”字符位模式的含义。在字符无符号的机器上,答案是 255。在字符有符号的机器上,答案是?1。
我的问题是为什么它会是 -1,这不取决于机器上使用的二进制数的表示形式吗?如果它使用一个的补码,它不是 0(-0) ,如果它是 2 的补码,它不会是 -1 吗?
引用 C++03 4.7/3:
如果目标类型是有符号的,如果它可以在目标类型(和位域宽度)中表示,则该值不变;否则,该值是实现定义的。
假设字节是 8 位,这意味着理论上你会得到以下之一:
-127 如果有符号量级计算机。-0 如果一个人的补充计算机。-1 如果二进制补码计算机。前两者在现实世界中几乎不存在。
| 归档时间: |
|
| 查看次数: |
5966 次 |
| 最近记录: |