double到unsigned int / char

mb84

在这里读到

根据C99§6.3.1.4脚注50:

当将实数浮点型的值转换为无符号类型时,无需执行将整数类型的值转换为无符号类型时执行的余数运算。因此,可移植的实际浮点值的范围是(-1,Utype_MAX + 1)。

现在,我对以下两者之间的细微差别(这次是C ++ 03!)感兴趣

double d1 = 257;
double d2 = -2;

unsigned char c1 = d1; // undefined, since d1 > 256
unsigned char c2 = d2; // undefined, since d2 < -1

double d1 = 257;
double d2 = -2;

unsigned int i1 = d1; // defined, since d1 <= 2^32
unsigned int i2 = d2; // still undefined, right?

unsigned char c1 = i1; // defined, modulo 2^8, so c1 == 1

因此,不能保证第一个c1和第二个c1都比较相等,对吗?上面的引用是否也适用于C ++ 03,还是有其他规则?

编辑:

为了进行c2定义(为-(2^31-1) <= d2 < 0),这是否有必要做?

double d2 = -2;
int sign = (d2<0 ? -1 : 1);

unsigned char c2 = sign * (int)abs(d2); // defined, c2 == 2^8-2 ?
埃里克·波斯蒂奇

是的,相同的规则适用于C ++。(但是,我要使用2010年的C ++标准草案; C ++ 2003是旧的。而且,我使用的是N3092,而不是正式的草案。)第4.9条第1款规定:“如果不能将截断的值以目标类型表示。”

无符号整数算法会自动换行;它比该类型的最大值多模1。但是,这适用于类型内的算术。从浮点到无符号整数的转换不属于此范围。

您的转换代码d2似乎比必要的更为复杂。如果d2在的范围内int,则可以简单地使用unsigned char c2 = (int) d2;(尽管从int到的转换unsigned int也在同质无符号整数算术之外,但此转换的规范确实说,它的减少与无符号整数算术相同。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

memcpy 从 unsigned char * 到 unsigned int

来自分类Dev

memcpy unsigned int到unsigned char分段错误

来自分类Dev

从 unsigned int 到 char 指针的类型转换中的分段错误

来自分类Dev

从char到int的加密

来自分类Dev

从`int`转换为`unsigned char`

来自分类Dev

从Char到Int的转换Java

来自分类Dev

多个int到const char *

来自分类Dev

char *到array <unsigned char ^>

来自分类Dev

目标C的unsigned char为负int

来自分类Dev

目标C的unsigned char为负数int

来自分类Dev

将unsigned int拆分为unsigned char []时出错

来自分类Dev

如何将unsigned int转换为unsigned char数组

来自分类Dev

unsigned int与unsigned char结合使用的小位操作问题

来自分类Dev

如何在C中将unsigned char *转换为unsigned int *?

来自分类Dev

十六进制char到int转换

来自分类Dev

无效*到C中的char或int

来自分类Dev

从Int转换为char-> string-> double-> int

来自分类Dev

从'const char *'到'unsigned char *'的无效转换

来自分类Dev

CORBA IDL到C ++-char与unsigned char?

来自分类Dev

将Const char *转换为Unsigned long int-strtoul

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

Java中有等于C的*(unsigned int *)(char)= 123吗?

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

Coverity 静态分析说 Unsigned Int 是 Char (C++)

来自分类Dev

short,int,long,float,double long,double,char的大小

来自分类Dev

qbytearray.at()到unsigned int

来自分类Dev

无法将参数'2'的'std :: string {aka std :: basic_string <char>}'转换为'char *'到'int Save(int,char *)'

来自分类Dev

从SQL中的字符串读取char,double,int模式

来自分类Dev

如何将int和double用作输入而不是char?

Related 相关文章

热门标签

归档