Tag: 型转换

为什么这个显式演员的结果与隐式演员的结果不同?

为什么这个显式演员的结果与隐式演员的结果不同? #include double a; double b; double c; long d; double e; int main() { a = 1.0; b = 2.0; c = .1; d = (b – a + c) / c; printf(“%li\n”, d); // 10 e = (b – a + c) / c; d = (long) e; printf(“%li\n”, d); // 11 } […]

如何确保strtol()已成功返回?

according documentation: 成功时,该函数将转换后的整数作为long int值返回。 如果无法执行有效转换,则返回零值。 如果正确的值超出可表示值的范围,则返回LONG_MAX或LONG_MIN,并将全局变量errno设置为ERANGE。 考虑strtol(str, (char**)NULL, 10); 如果str为”0\0″如何知道函数是否失败或只是将字符串转换为”0″ ?

为什么C有这么多不同的类型?

我写了一个简单的计时器函数来计算start和end之间经过的时间 double mytimer(struct timeval *start, struct timeval *end) { return (end->tv_sec – start->tv_sec) + (end->tv_usec – start->tv_usec)*1e-6; } gcc给出以下警告: 警告:从’__suseconds_t’转换为’double’可能会改变其值 警告:从’__time_t’转换为’double’可能会改变其值 以下是timeval的定义: struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; 所以我的问题是为什么C定义了这么多不兼容的类型,而不是简单地使用原始类型,如int short …? 它根本不是用户友好的。 我怎样才能对这些类型进行算术运算? 更新 大多数人似乎忽略了我的第二个问题。 添加两种不同类型的标准方法是什么,例如time_t和suseconds_t ?

在没有sprintf的情况下将整数转换为C中的字符串

没有sprintf 可以在C中将整数转换为字符串吗?

c – 整数向下转换

关于C中的整数倒数,例如 一个int值000F’E000向下转换为空头或未000F’E000空头将成为E000 。 short – > -8192 , unsigned short – > 57344 , 它只是简单地削减了比特吗? 而那些上流社会呢? 例如,int -10是ffffff81 , ffffff81转换为long long的规则是什么? @Update 关于upcasting,根据答案我做了一些测试,发现有2的补码它有以下规则: 签: positive – > positive:将0添加为前缀位, 否定 – >否定:添加1作为前缀位, 签名: 将0添加为前缀位, 码: // integer numbers, downcast & upcast, #include void downcastTest() { int i = 127<<13; printf("%X, %hX, %hi\n", i, i, i); } […]

C:在函数调用上传递参数时的类型转换

来自C编程语言第2版: 由于函数调用的参数是表达式,因此在将参数传递给函数时也会发生类型转换。 在没有函数原型的情况下,char和short变为int,float变为double。 通过阅读文本,我得到的印象是,除非您通过使用强制转换或函数原型显式指定参数类型,否则函数参数将始终作为int或double传递。 为了validation我的假设,我编译了以下代码: #include main() { unsigned char c = ‘Z’; float number = 3.14f; function_call(c, number); } void function_call(char c, float f) { } 编译后我得到以下警告: typeconversion.c:11:警告:’function_call’的冲突类型 typeconversion.c:7:警告:’function_call’之前的隐式声明就在这里 我的猜测是c和数字都在函数调用中转换为int和double,然后转换回char和float。 这是真的发生了什么?