Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 哪些语言将符号/无符号属性指定给操作而不是数据?_Types_Programming Languages_Unsigned - Fatal编程技术网

Types 哪些语言将符号/无符号属性指定给操作而不是数据?

Types 哪些语言将符号/无符号属性指定给操作而不是数据?,types,programming-languages,unsigned,Types,Programming Languages,Unsigned,在大多数高级语言(高于汇编语言)中,整数变量具有有符号或无符号的性质。在C语言中,“unsignedshort”作为数据类型。我能想到的所有语言,C族或Pascal派生的,更新的语言,比如Go,都有这样的数据类型。(有些不提供未签名的、刚签名的,但不介意这些。) 基本事实是,我所研究的所有CPU都有与操作相关的符号性,或者在操作后选择分支操作码。有符号右移和无符号右移操作码。有符号整数和无符号整数都经过相同的算术电路,因为1和0的结果是相同的。进位和溢出标志得到调整。当编译器根据其构建的符号表和

在大多数高级语言(高于汇编语言)中,整数变量具有有符号或无符号的性质。在C语言中,“unsignedshort”作为数据类型。我能想到的所有语言,C族或Pascal派生的,更新的语言,比如Go,都有这样的数据类型。(有些不提供未签名的、刚签名的,但不介意这些。)

基本事实是,我所研究的所有CPU都有与操作相关的符号性,或者在操作后选择分支操作码。有符号右移和无符号右移操作码。有符号整数和无符号整数都经过相同的算术电路,因为1和0的结果是相同的。进位和溢出标志得到调整。当编译器根据其构建的符号表和变量属性选择进位分支与溢出分支或类似的选择时,就会出现这种区别

我只是好奇,因为我喜欢接近硅语言——有没有更高级别的语言,比如说在C-on-up级别,其中整数值不是用任何有符号/无符号属性键入的

我知道Java中的>>>操作符。这是我所要求的一个小例子,但我想知道是否有一些语言(可能不太清楚)完全使用不同的运算符,而不是不同的数据类型来表示有符号/无符号


(有些相关的问题是,是否有任何语言提供对CPU的C或O标志的访问,这样您就可以自己动手了。)

我认为,从语言开发人员的角度来看,具有未签名和签名操作的情况相当少。具有无符号右移行为的java运算符>>>,似乎是一个例外,它的用法与其将其操作数视为有符号或无符号(我的假设)关系不大。 如果将所有有符号/无符号逻辑都实现为操作,那么很快就会变得棘手。例如,考虑两个C赋值:

short var_a = -1;
unsigned int var_b = var_a;
printf("%d", var_b); // -1

unsigned short var_a = -1;
unsigned int var_b = var_a;
printf("%d", var_b); // 65535
第一种情况必须执行符号扩展,因为它是有符号类型的向上转换;第二种情况不能执行符号扩展,因为它是无符号类型的向上转换。我不想考虑对此类分配使用哪种分配操作

也考虑:

“向任何C开发人员询问unsigned,很快你就会发现 几乎没有一个C开发人员真正理解这一点 无符号,什么是无符号算术。像这样的东西使C 复杂。我认为Java的语言部分相当简单 你必须去查图书馆。”


我同意他的观点,认为只有一种签名类型更简单。在Java等语言中需要无符号算术的人可以自己轻松实现它(我用Java实现了一个C解释器)。

听说过很多语言,但没有听说过这样的语言。我仍然喜欢这个问题,因为我曾经考虑过完全相同的问题。cpu可能会将符号性与运算符联系起来,但这不是程序员正确的抽象。符号性是数据类型的一种性质。底层表示不同,至少在其域不相等的意义上是如此。在高级语言中,将保留符号的移位作为运算符使用似乎很方便,但其用途仍有争议-保留符号的右移是2的除法,这可能更好地反映了应用程序域中的算法步骤。如果代码实际上是在处理问题域中的位集。。。。。。它应该通过使用/定义合适的数据类型来表示,该数据类型可能会附带一组合适的运算符。编译器可以将此数据类型映射到cpu/vm本机支持的最适合的数据类型,同时考虑应用于数据的高级操作和性能标准(在本例中,映射很容易,并且不会带来任何显著的性能损失)。