- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很抱歉问了一个非常基本的问题。考虑以下示例:
const
c1 = 1; // Is this Byte or ShortInt?
c2 = 1234; // Is this Word or Smallint?
c3 = 123456; // Is this Cardinal or Integer?
读完这个 documentation 后,我可以得出的结论是,负值被解释为有符号,正值被解释为无符号。然而,例如123456 (根据文档将被解释为 Cardinal
)也可以在 Integer
的上下文中使用,我的意思是它用于在计算中使用常量的 Integer
变量。因此,是否保证常量始终为Cardinal
,以便有必要将类型转换为Integer
?
最佳答案
documentation(XE8 是我写这篇文章时的最新版本)告诉您真正的常量有一个类型。但是,在指定该类型的实际类型时,该文档具有误导性。当我说误导时,我是有点善意的。
如果您阅读了此官方 documentation,那么您会倾向于相信无符号类型优于有符号类型。但这个程序表明情况并非如此:
program SO32160057_overloads;
{$APPTYPE CONSOLE}
procedure foo(value: UInt8); overload;
begin
Writeln('UInt8');
end;
procedure foo(value: UInt16); overload;
begin
Writeln('UInt16');
end;
procedure foo(value: UInt32); overload;
begin
Writeln('UInt32');
end;
procedure foo(value: UInt64); overload;
begin
Writeln('UInt64');
end;
procedure foo(value: Int8); overload;
begin
Writeln('Int8');
end;
procedure foo(value: Int16); overload;
begin
Writeln('Int16');
end;
procedure foo(value: Int32); overload;
begin
Writeln('Int32');
end;
procedure foo(value: Int64); overload;
begin
Writeln('Int64');
end;
const
ZeroInt32 = Int32(0);
ZeroUInt16 = UInt16(0);
begin
foo(127);
foo(128);
foo(32767);
foo(32768);
foo(2147483647);
foo(2147483648);
foo(9223372036854775807);
foo(9223372036854775808);
foo(ZeroInt32);
foo(ZeroUInt16);
foo(UInt8(0));
end.
输出为:
Int8UInt8Int16UInt16Int32UInt32Int64UInt64Int32UInt16UInt8
Let's have a look at another program:
program SO32160057_comparisons;
var
Int8var: Int8 = 0;
Int16var: Int16 = 0;
Int32var: Int32 = 0;
begin
if Int8var < 127 then ;
if Int8var < 128 then ; // line 10
if Int8var < Int16(128) then ; // line 11
if Int16var < 32767 then ;
if Int16var < 32768 then ; // line 13
if Int16var < Int32(32768) then ; // line 14
if Int32var < 2147483647 then ;
if Int32var < 2147483648 then ; // line 16
if Int32var < Int64(2147483648) then ;
end.
编译器发出以下警告:
(10): W1022 Comparison always evaluates to True(10): W1023 Comparing signed and unsigned types - widened both operands(11): W1022 Comparison always evaluates to True(13): W1022 Comparison always evaluates to True(13): W1023 Comparing signed and unsigned types - widened both operands(14): W1022 Comparison always evaluates to True(16): W1022 Comparison always evaluates to True(16): W1023 Comparing signed and unsigned types - widened both operands
So, by my empirical analysis, the compiler looks at the value of an integral literal, and determines its type by finding the first type in the following list which can represent the value:
Int8
UInt8
Int16
UInt16
Int32
UInt32
Int64
UInt64
This rule can be overridden by specifying the type using the typecast syntax. For instance, to declare an Int32
with value 0
you would write Int32(0)
.
Now let us apply that rule to the concrete example that you give in the question, namely 123456
. According to the rules above, the first type in the list which can represent this value is Int32
. Also known as Integer
.
Now, because this is an unsigned type, you might expect that a comparison against an unsigned UInt32
variable will result in warning W1023, comparing signed and unsigned types. But that is not the case. The compiler recognises that 123456
is a positive value and that we are comparing two positive values. On the other hand, the warning is emitted with -123456
.
program SO32160057_123456;
var
UInt32var: UInt32 = 0;
begin
if UInt32var > 123456 then ; // line 7
if UInt32var > -123456 then ; // line 8
end.
编译器发出以下警告:
(8): W1022 Comparison always evaluates to True(8): W1023 Comparing signed and unsigned types - widened both operands
关于delphi - 整数真常数的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160057/
我不明白基因编程的人工智能是如何实现的。可以确定最终方程中何时应该有一个常数。如果我采用公式 F(m) = ma; F(m) = m9.8,A.I.知道真正的数字 9.8 到底是多少吗?据我了解,您实
我的批次大小是可变的,所以我的所有输入都是以下形式 tf.placeholder(tf.float32, shape=(None, ...) 接受可变的批量大小。但是,如何创建具有可变批处理大小的常数
我有一个一维 Numpy 数组 A长度N .对于每个元素 x在数组中,我想知道数组中所有元素在[x-eps]范围内的比例是多少; x+eps ],其中 eps是一个常数。 N数量级为 15,000。
如果我像这样在文件中设置一些常量: 'use strict'; angular.module('balrogApp.config', []) .constant('balrogConfig',
谁能给我一个常量 r 值的例子? 因为显然即使文字也是右值而不是常量右值。 最佳答案 const T f(); 根据该定义,表达式 f() 是 const T 类型的右值表达式,即常量右值。 关于c+
我正在开发一个 Angular 应用程序,我想创建一个配置文件。根据我的阅读,我应该使用 Angular 常数。 所以我尝试创建我的常量。从我读到的内容( here , here 以及 here +
const int N = 100; void function1(int array[]){ // ... } void function2(int arra
考虑以下(工作)片段: Eigen::ArrayXd x (8); x > y (x.data(), 2, 4); 这也是可行的: const Eigen::ArrayXd const_x = x;
我知道你可以使用: #define _USE_MATH_DEFINES 然后: M_PI 得到常量 pi。但是,如果我没记错的话(欢迎评论)这是编译器/平台相关的。那么,当我将 pi 常量从 Linu
为什么这段代码无法编译? package main const a = 1.000001 const base = 0 const b = a+base func main() { f(b)
为什么下面的代码每条语句都引用了大O常量(这里我为了约定使用1)? 我的意思是,如果数组大小变大,时间复杂度可能会变大,对吗?而且总数会越来越大,会不会影响复杂度? 伪代码: def find_sum
我正在尝试创建一个函数来填充多个系列中缺失的数字,具有不同的数字比例,同时为每个系列生成一个常量列。 from tika import parser import pandas as pd impor
我正在尝试近似 e 的值(~2.7) 由此定义,对于每个第 n 项 在Python中使用递归函数。 到目前为止我已经得到了这个, def NapierConstant(runs): retur
系统提示我输入代码以某种方式打印 Champerowne 常量系列。 (实际使用它!)所以我们想找到这个系列的第 n 个数字:1234567891011121314...这是我的代码: #inclu
我正在学习硕士定理的期中考试,我遇到了案例 2 的示例,其中 k > 0。除了常数及其递增或计算方式之外,我了解有关定理的所有内容。 Case 2状态:T(n) = Θ(nlogba logk+1n)
问题实例:无向无权图 G=(V,E)。两个源节点a和b,两个目的节点c和d以及一个常数D(完全正数)。(我们可以假设lambda(c,d),lambda(a,b)>D,当lambda(x,y ) 是
我有一张很大的 table 。 它目前在 MySQL 数据库中。 我使用django。 我需要迭代 每个表的元素来预先计算一些特定的数据(也许如果我更好的话,我可以这样做,但这不是重点)。 我想在不断
VBScript 常数 常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。VBScript 定义了许多内部常数。详细信息,请参阅 VBScript 语言参考。 创建常数 您可以使用
我正在学习 javascript,我发现一个文件中有许多用操作数“:”而不是“=”完成的赋值。尽管问题的标题是这样,但我也在非常量中看到过它。那有什么意义呢?这里的“:”操作数是什么意思?谢谢。 v
鉴于应用程序启动: angular.module("starter", [ "ionic" ]) .constant("DEBUG", true) .run(function() {
我是一名优秀的程序员,十分优秀!