|
|
1
1
好吧,这是正确的,但它缺少了一些东西:你没有说预期的符号表示。编写规范的一个专家提示是实际指定您想要的内容。 假设你想要两个补码,因为它是最流行的表示方案。等价地,给定某个整数 x 您想转换为签名的 N -位整数格式,您想要一个结果 y 与一致 x 模2 N 有2个 N 1. ¤ y <2. N 1. .
这个
您不能依赖具有更宽类型的并集,因为C标准没有指定存储中字节的顺序,因此仅从C标准不知道更宽类型中哪些字节包含其低位。我们可以通过将值转换为
在这里,我们执行转换,并在复合文字中使用并集,用twos补码重新解释其结果:
虽然问题中没有提到C++,但我要注意的是,通过并集重新解释并不是由C++标准定义的。另一种选择是复制字节:
这两者都可移植到支持所需固定宽度类型的任何实现中。
这也可以使用算术而不是重新解释字节来完成。假设我们正在从某种更广泛的类型转换为
M
位。首先我们可以选到
我们还可以使用:
该算术在中进行了解释 this answer . |
|
|
Olivier Lasne · 将i128转换为f64的正确方法是什么 11 月前 |
|
|
Floris · 为什么cpp编译器在类型声明不正确时要转换为int? 1 年前 |
|
|
Bhargav Patil · 运算符的大小并尝试打印数组 1 年前 |
|
|
Vedant Yadav · c中用户定义类中的类型转换++ 1 年前 |
|
|
user25265096 · 从任何可用类型转换接口参数 1 年前 |
|
|
zahl · javascript中的签名int到签名char 1 年前 |