type-promotion相关内容
在下面的程序中,如果算术表达式出现问题,我们如何让编译器发出警告/错误。 如果算术表达式产生的值超过其类型的最大值,我希望编译器发出警告/错误。 我用gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)编译了下面的程序,使用的编译命令是gcc int_promo_flags.c -Wall -Wextra 我期待来自第long long int y
..
我一直在使用 gfortran 的 -fdefault-real-8 选项来自动提升在程序到双精度,连同任何常数,例如 1.23.如果我想切换回单精度,我只需要删除该选项并重新编译,而无需更改源代码中的单个字符. 我开始使用 ISO_FORTRAN_ENV 模块,因为它允许我使用 INPUT|OUTPUT|ERROR_UNIT 等常量,以及 IOSTAT_END 和 IOSTAT_EOR 和
..
假设如下: unsigned char foo = 3;无符号字符条 = 5;无符号整数 shmoo = foo + bar; foo 和 bar 值是否保证被提升为 int 值以评估表达式 foo + bar -- 或者是否允许实现将它们提升为 unsigned int? 在第 6.2.5 节第 8 段: 对于任意两个具有相同符号和不同整数转换等级的整数类型(见 6.3.1.1)
..
字节 a = 1;字节 b = 1;字节 c = a + b; 抛出错误:可能损失精度 byte subt = a_s - a_b;^必需:字节发现:int 这种行为是否与 jvm 有关或它是用 java 语言定义的. 编辑:如果它是用 java 语言定义的,那么是因为要记住 jvm 吗? 意味着,如果Java支持的字节数据类型,那么为什么上字节操作结果 INT 解决方案
..
我正在升级一个基于 Flutter 框架的个人包.我注意到这里在 Flutter Text 小部件源代码中,有一个空检查: if (textSpan != null) {properties.add(textSpan!.toDiagnosticsNode(name: 'textSpan', style: DiagnosticsTreeStyle.transition));} 然而,textSp
..
byte a = 1;字节 b = 1;字节 c = a + b; 抛出错误:可能损失精度 byte subt = a_s - a_b;^要求:字节找到:int 这种行为是否与jvm有关,还是用java语言定义的. 编辑:如果它是用 java 语言定义的,那么是因为记住 jvm 吗? 表示如果java支持byte数据类型,那么为什么操作字节结果int 解决方案 如果j
..
你们有谁知道这将如何在 C 中计算? uint8_t 采样率 = 200;uint8_t 结果;结果 = 0.5 * 采样率; 现在,问题是 0.5 是一个浮点数,而 samplerate 是一个整数.Result 然后可以是 0,因为 0.5 被转换为整数,因此四舍五入为 0(Result = 0 * 200 = 0).或者 Result 可能是 100,因为编译器首先看到 0.5 并将 s
..
在史蒂文·普拉塔(Steven Prata)的书"C Primer Plus"中,有一个关于类型转换的部分,其中“基本规则"是“类型转换".部分已在规则1中说明: 在K& R C下,但不在当前C下,float会自动转换为double. http://www.9wy.net/onlinebook/CPrimerPlus5/ch05lev1sec5.html 有人可以解释的意思,但不
..
我正在升级基于Flutter框架的个人软件包.我注意到这里在Flutter Text小部件源代码中,存在空检查: if(textSpan!= null){properties.add(textSpan!.toDiagnosticsNode(name:'textSpan',style:DiagnosticsTreeStyle.transition));;} 但是, textSpan!仍在使用
..
我试图理解C ++中的隐式转换规则,并且我了解到,当两种主要类型之间存在一种操作时,“较低类型"将被提升为“较高类型",所以可以这样说: int a = 5;浮点数b = 0.5;std :: cout
..
#include void main() { unsigned x = 1; signed char y = -1; if(x > y) printf("x > y"); else if(x == y) printf("x == y"); else printf("x
..
有关于C ++的科学计算方面的出色论文,其中作者(T. Veldhuizen )建议使用一种基于特征的方法来提升类型.我已经使用了这种方法,并发现它是有效的: #include #include #include template struct promote_trait{};
..
我知道在C和Java中,float的基本表示形式是IEEE754-32,double是IEEE754-64. 在表达式中,float将自动提升为double.又怎样? 以3.7f为例.这样的过程吗? 3.7f将使用IEEE754在内存中表示.它可以容纳4个字节. 在计算期间,可以将其加载到64位寄存器(或任何64位位置)中,从而将3.7f转换为IEEE754-64表示. 解决方
..
我一直使用gfortran的-fdefault-real-8选项自动将程序中任何地方声明的每个REAL提升为双精度,以及任何常量,例如 1.23.如果我想切换回单精度,则只需删除该选项并重新编译,而无需在源代码中更改单个字符. 我开始使用ISO_FORTRAN_ENV模块,因为它允许我使用INPUT|OUTPUT|ERROR_UNIT以及IOSTAT_END和IOSTAT_EOR等常量(这似
..
我想知道为什么每次对表达式求值或按位运算时将byte和short值提升为int的原因吗? 解决方案 因为Java语言规范是这样说的. 第5.6.1节定义了一元数值提升以用于某些运算符的撤消,它说: 如果操作数的编译时类型为byte,short或char,则通过扩展原语转换(第5.1.2节)将其提升为int类型的值. 第5.6.2节在评估二进制数值运算符("binary"表示具有
..
我遇到了一个奇怪的问题(在阅读粗略的代码时自己问).让我们看一下表达式: double a = c*d*e*2/3*f; 其中c,d,e,f是类型为double的初始化变量.标准是否保证将其视为c*d*e*2(双重结果),然后除以3,再乘以f(或某些类似行为).显然,不希望将2/3计算为0. 标准的哪个段落对此进行了定义? 解决方案 基于 [简介]-注释7 (非规范性内容
..
字节a = 1; byte b = 1; byte c = a + b; 引发错误:可能会失去精确度 byte subt = a_s - a_b; ^ 必填:字节 找到:int 这是行为与jvm或它在java语言中定义有关。 编辑:如果它是用java语言定义那么就做因为记住jvm? 意味着如果java支持 byt
..
我最近在 Data.Promotion “>单身的。它具有类型族的负载,允许在类型级别进行基本上任意的计算。我有几个使用问题: ($) , (%$) , ($$) ,它们是否与:++有关$ ,:。$ ,等等?这些实际上是中缀操作员吗?我在印象之下所有中缀型构造函数都必须以:。 我试图将一个构造函数映射到列表上: { - #LANGUAGE DataKinds,TypeOpera
..
我有一个类用 typename T 模板化。它包含一个函数, 模板运算符+(myClass lhs,const T& rhs){ return lhs + = rhs; } myClass myClass :: operator + =(const T& rhs){
..
假设如下: unsigned char型富= 3; unsigned char型吧= 5;unsigned int类型SHMOO = foo的酒吧+; 是富和栏保证晋升为 INT 值富+酒吧 - 或者实现允许以促进它们无符号整型? 在部分6.2.5 第8段: 对于任何两个整数类型具有相同的符号性和不同的整数转换等级 (见6.3.1.1),以较小的整数转换等级的类型值的范围是
..