我正在开发一种由C#表达式树支持的类型化脚本语言。关于二进制运算符的适当类型转换,我在一个问题上陷入困境。下面是我试图模仿的行为的一个例子:(转换规则应该是同一个C#的编译器)
var value = "someString" + 10; // yields a string
var value = 5 + "someString"; // also yields a string, I don't know why
var x = 10f + 10; // yields a float
var y = 10 + 10f; // also yields
看起来我们正在为C++得到一个全新的“面试问题”(我希望不是,实际上)。
众所周知,它是C++17之前未定义的行为,但从C++17开始,它会被很好地定义吗?
由于目前似乎还没有实现此C++17修改的编译器,那么根据表达式计算规则,有谁能解释x的值在下面的代码中呢?
int i = 0;
int x = i++ + i++;
Alisdair在他2016年的演讲中提到了这个例子,但我并不完全清楚x的最终价值将是什么(尽管他的意思似乎是至少会有1)。
显然,在这种情况下,i本身将是表达式末尾的2。
我需要在循环中设置一个非常大的数组的元素。在某些情况下,循环可能是continue的,因此数组的位置必须分开计算。
我总是需要设置10个连续的元素。(10就是一个例子。在某些情况下,我可能需要30或更多。)
是k+c (c=0,1,2,.还是k++是更好的方法?下面的两种解决方案哪一种更有效,为什么?
int k = 0;
for (int i = 0; i < aVeryHighNumber; i++) {
if (continueRequired()) {
continue;
}
k = ... // get
对于整数数据类型,2147483647号正在范围内。
我试了一个小程序如下,
int a = 2147483647;
int b = 2147483647;
int c = a + b;
当我打印c时,它打印为-2。我将c的类型更改为long,而double的结果仍然相同。
为什么这是比奥尔?
我正在使用java 12。
CLRS是科门,莱瑟森,里弗特和斯坦的“算法入门”一书。
问题:
考虑了将两个n位二进制整数添加到两个n元数组A和B中的问题。这两个整数的和应以二进制形式存储在(n + 1)元数组C中。
为什么正确的解决方案需要进位?
我的解决方案:
def AddBinary(A,B):
n = max(len(A),len(B))
C = [0 for i in range(n+1)]
for i in range(n):
C[i] = (A[i] + B[i]) % 2
return C
正确的解决方案:
def AddBinary(A,B):
我用C、Perl和Python编写了一个简单的程序,它将一个变量递增到10亿。我没有想到不同的语言之间会有太大的差异,但我非常惊讶地看到了一个巨大的差异。这些程序简单地数到10亿:
在c中:
int main() {
int c = 0;
while (c < 1000000000) {
c++;
}
}
在Perl中:
#! /usr/bin/env perl
use strict;
use warnings;
my $x = 0;
while ($x < 1000000000) {
$x++;
}
在Python中:
#!/usr/bin/env
我有一个整数信号(范围从0到9999)。我正试着把它显示在一组7段显示器上。我已经实现了多路复用器(一次显示一个数字)。现在我需要将我的整数分成一位数。
理论上很简单:只需使用mod (ex NUM / 100 mod 10给出第二个数字)。问题是,当我使用mod (使用4次)编译解决方案时,我的代码仅mod就使用了超过9000个单元。这是太多了(但有效)。
然后我尝试转换为更小的整数,但它不起作用。0到9的整数范围使用4位,因此它实际上是0到15的范围。
我相信有更简单的明显的解决方案,但我无法找到它。请注意,我是初学者:)。
编辑:代码:
此部分为给定的数字设置正确的输出以显示
proce
(define (mult a b) ;;function mult(a,b)
(cond
((IsItZero? b) 0) ;;if b = 0: return 0
((let((c (mult a (rest b)))) ;;c = mult(a, floor(b/2))
(if (= (first b) 0) ;;if b is even
(cons (0 c))
类型构造函数:
template< typename T > T*;
单位算子
template< typename T > T* unit( T /*or T&*/ t ) { return &t; }
绑定算子
template< typename A, typename B >
B* bind( A a, std::function<b*(a)> f )
{ return a ? f(a) : nullptr; }
Monad定律
bind( unit(x), f ) === f(x)
bind( bind(x, f1),
我试图使用python将两个二进制数字相加,但我不知道如何制作一个非常简单的程序来完成它。到目前为止,这就是我所得到的,但并不奏效:
b=input("what number would you like to add ")
convert1= lambda b: str(int(b, 2))
a=input("what number would you like to add to it ")
convert= lambda a: str(int(a, 2))
c=(b+a)
print (c)
convert=lambda c: str(int(c, 2