以下两个C函数是等效的:
unsigned f(unsigned A, unsigned B) {
return (A | B) & -(A | B);
}
unsigned g(unsigned A, unsigned B) {
unsigned C = (A - 1) & (B - 1);
return (C + 1) & ~C;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么它们相同?将g它转化为什么规则/变换f?
在我受到抨击之前,我想说我确实理解浮点数和类似的东西,但这似乎不是我的问题.
为简化起见,我试图确定一个数字是否超过2位小数.我这样做是通过将数字乘以100(存储在变量" test1"下)然后截断它int() ($test2)并将其与a进行比较if.
$test1 = $number * 100;
$test2 = int($test1);
unless ($test1 == $test2) {
die ("test1:$test1, test2:$test2");
}
Run Code Online (Sandbox Code Playgroud)
最初$number来自一系列其他函数,实际上应该只有两位小数,因此我试图捕捉那些不是(因为一些条目似乎有很多小数).
但是,我得到了:
test1:15, test2:14
Run Code Online (Sandbox Code Playgroud)
从我的die().
有人能解释一下会发生什么吗?怎么能int(15)是14?
什么是bool保证返回?我可以依赖bool类型来解释为0或1吗?如果bool的数值解释在C99中不可靠,那么有一个标准吗?在依赖bool进行算术运算时,我在LLVM,GCC或Visual C++中应该注意什么?
举个例子,如果我这样做:
// An example of calculating a possible stride in bytes.
// hasData(), is8bit(), and is16bit() return as bool type
unsigned int stride = object->hasData() * object->size() *
(object->is8bit() * sizeof(uint8_t) +
object->is16bit() * sizeof(uint16_t));
Run Code Online (Sandbox Code Playgroud)
在示例中,我打赌bool类型只返回0或1.
例如,ARM 处理器有一条mul指令,它执行 32 位 x 32 位乘法并返回结果的最低有效 32 位。它们还有umull和smull指令,再次执行 32 位 x 32 位乘法,但返回完整的 64 位结果。umull进行无符号乘法,并smull进行有符号乘法。
为什么不需要单独的未签名和签名版本mul?在 32 位 x 32 位乘法的情况下,结果的最低有效 32 位在这两种情况下可能是相同的?32 位是完全相同的还是比 32 位更多?
更一般地,在 m 位 x n 位乘法(产生 (m+n) 位结果)的情况下,无符号乘法和有符号乘法的最低有效位有多少个相同?
有没有一种方法可以计算 mod 运算,而无需在汇编 x86 语言中使用 DIV 或 IDIV?
例如,可以使用 DIV 来获取除法的剩余部分。但是,除了使用 DIV 之外,还有其他选择吗?
我想证明一些简单的事情,例如对于每个自然数 n,都存在一个自然数 k 使得:
(2*n + 1)^2 = 8*k + 1
Run Code Online (Sandbox Code Playgroud)
这样的证明是如何进行的呢?我想把它分成 n 是奇数或偶数的情况,但我不知道在 Coq 中如何做到这一点。另外,Coq 中是否有内置的幂(指数)运算符?
我有以下问题:
> 1e20 %% 3
[1] 0
Warning message:
probable complete loss of accuracy in modulus
Run Code Online (Sandbox Code Playgroud)
结果不可能是正确的,我确定这是因为1e20它真的很大。但我想在R. 有机会提出这个吗?
编辑:我想做以下挑战:https : //www.codeabbey.com/index/task_view/modular-calculator
这是我的代码:
library(tidyverse)
library(magrittr)
get_result <- function(.string){
terms <- .string %>%
str_split("\n") %>%
unlist %>%
str_replace("%", "%%") %>%
str_squish
terms[1] %<>%
str_c("x <<- ", .)
terms[2:length(terms)] %<>%
str_c("x <<- x ", .)
map(terms, ~ {
eval(parse(text = .x))
})
x
}
get_result("6
+ 12
* 99
+ 5224
* 53
* 2608
* 4920
+ …Run Code Online (Sandbox Code Playgroud) 代码:
int main(void) {
int i = 0, j = 0;
double avg = 0;
int *pi, *pj;
double *pavg;
Run Code Online (Sandbox Code Playgroud)
..
pi = &i;
pj = &j;
pavg = &avg;
Run Code Online (Sandbox Code Playgroud)
..
*pi = 5;
*pj = 10;
*pavg = (*pi + *pj) / 2;
Run Code Online (Sandbox Code Playgroud)
在这里打印:
printf("%lf\n\n", avg);
Run Code Online (Sandbox Code Playgroud)
它打印 7.000000000
return 0;
}
Run Code Online (Sandbox Code Playgroud) Scanner sal = new Scanner(System.in);
System.out.print("Enter first_salary: ");
int Salary1 = sal.nextInt();
System.out.print("Enter second_salary : ");
int Salary2 = sal.nextInt();
System.out.print("Combined Salary is " + Salary1 + Salary2);
Run Code Online (Sandbox Code Playgroud)
我试图获取用户输入两次,然后打印总和。相反,输出是连接数字而不是实际将它们相加。
我正在尝试为我的班级编写一个 30 行或更少的程序(自我强加的挑战)。
该程序会询问用户一个简单的加法、除法、乘法或减法问题,然后玩家回答、冲洗并重复 10 次,然后询问玩家是否要继续或结束程序。应随机选择问题类型(add、mult等)。
这样我就不需要使用巨大的 switch case 或 if-else 树,我想知道是否有任何方法可以在变量中包含运算符,然后稍后使用它。
例子:
var operator = +;
int[] n = {1, 2};
System.out.println(n[0] operator n[1]);
Run Code Online (Sandbox Code Playgroud)
输出将是“3”
这就是我想做的事情的一个例子。这可能吗?