标签: integer-arithmetic

两个按位运算的等价性

以下两个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

c bit-manipulation integer-arithmetic

2
推荐指数
1
解决办法
446
查看次数

perl - int()递减整数

在我受到抨击之前,我想说我确实理解浮点数和类似的东西,但这似乎不是我的问题.

为简化起见,我试图确定一个数字是否超过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

floating-point int perl integer-arithmetic

2
推荐指数
1
解决办法
92
查看次数

什么可以在C99中返回bool类型?

什么是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.

c standards arithmetic-expressions integer-arithmetic

2
推荐指数
1
解决办法
205
查看次数

对于无符号乘法和有符号乘法,有多少个最低有效位相同?

例如,ARM 处理器有一条mul指令,它执行 32 位 x 32 位乘法并返回结果的最低有效 32 位。它们还有umullsmull指令,再次执行 32 位 x 32 位乘法,但返回完整的 64 位结果。umull进行无符号乘法,并smull进行有符号乘法。

为什么不需要单独的未签名和签名版本mul?在 32 位 x 32 位乘法的情况下,结果的最低有效 32 位在这两种情况下可能是相同的?32 位是完全相同的还是比 32 位更多?

更一般地,在 m 位 x n 位乘法(产生 (m+n) 位结果)的情况下,无符号乘法和有符号乘法的最低有效位有多少个相同?

binary assembly arm multiplication integer-arithmetic

2
推荐指数
1
解决办法
802
查看次数

汇编 x86 中模运算的替代形式

有没有一种方法可以计算 mod 运算,而无需在汇编 x86 语言中使用 DIV 或 IDIV?

例如,可以使用 DIV 来获取除法的剩余部分。但是,除了使用 DIV 之外,还有其他选择吗?

x86 assembly integer-arithmetic

2
推荐指数
1
解决办法
1522
查看次数

用 Coq 编写简单算术证明

我想证明一些简单的事情,例如对于每个自然数 n,都存在一个自然数 k 使得:

(2*n + 1)^2 = 8*k + 1
Run Code Online (Sandbox Code Playgroud)

这样的证明是如何进行的呢?我想把它分成 n 是奇数或偶数的情况,但我不知道在 Coq 中如何做到这一点。另外,Coq 中是否有内置的幂(指数)运算符?

coq integer-arithmetic

2
推荐指数
1
解决办法
600
查看次数

使用非常大的数字进行计算时,模数完全丧失准确性

我有以下问题:

> 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)

largenumber r modulus integer-arithmetic

2
推荐指数
1
解决办法
650
查看次数

为什么 (5+10)/2 是 7.0 而不是 7.5?C编程

代码:

 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)

c double integer average integer-arithmetic

2
推荐指数
1
解决办法
123
查看次数

为什么是连接而不是算术运算?

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)

我试图获取用户输入两次,然后打印总和。相反,输出是连接数字而不是实际将它们相加。

java math types string-concatenation integer-arithmetic

2
推荐指数
1
解决办法
712
查看次数

如何在Java中创建包含运算符的变量?

我正在尝试为我的班级编写一个 30 行或更少的程序(自我强加的挑战)。

该程序会询问用户一个简单的加法、除法、乘法或减法问题,然后玩家回答、冲洗并重复 10 次,然后询问玩家是否要继续或结束程序。应随机选择问题类型(addmult等)。

这样我就不需要使用巨大的 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”

这就是我想做的事情的一个例子。这可能吗?

java variables operators integer-arithmetic

2
推荐指数
1
解决办法
1108
查看次数