Questions tagged «integer-arithmetic»

11
如何在Bash脚本中添加数字?
我有这个Bash脚本,在第16行遇到问题。如何获取第15行的先前结果并将其添加到第16行的变量中? #!/bin/bash num=0 metab=0 for ((i=1; i<=2; i++)); do for j in `ls output-$i-*`; do echo "$j" metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15) num= $num + $metab (line16) done echo "$num" done


1
对于Python 3.x整数,比位移快两倍?
我正在查看sorted_containers的来源,很惊讶地看到这一行: self._load, self._twice, self._half = load, load * 2, load >> 1 这load是整数。为什么在一个位置使用位移,而在另一位置使用乘法?移位可能比整数除以2快,但这是合理的,但是为什么不还用移位代替乘法呢?我对以下情况进行了基准测试: (时间,分) (班次,班次) (时间,班次) (平移,除法) 并发现#3始终比其他替代方法快: # self._load, self._twice, self._half = load, load * 2, load >> 1 import random import timeit import pandas as pd x = random.randint(10 ** 3, 10 ** 6) def test_naive(): a, b, …

13
确定数字是十的倍数还是在一组特定范围内
我的程序中有一些循环。我可以写出伪代码,但我不确定如何逻辑地编写它们。 我需要 - if (num is a multiple of 10) { do this } if (num is within 11-20, 31-40, 51-60, 71-80, 91-100) { do this } else { do this } //this part is for 1-10, 21-30, 41-50, 61-70, 81-90 这对于蛇和梯子棋盘游戏来说,如果对我的问题更有意义。 我想我需要使用模数的第一个if语句会if (num == 100%10)正确吗? 第二个我不知道。我可以这样写出来,if (num > 10 …

4
是无符号整数减法定义的行为吗?
我遇到了某人的代码,该人似乎认为当结果为负数时,从另一个相同类型的整数中减去无符号整数是有问题的。这样的代码即使在大多数架构上都能正常工作,也是不正确的。 unsigned int To, Tf; To = getcounter(); while (1) { Tf = getcounter(); if ((Tf-To) >= TIME_LIMIT) { break; } } 这是我能从C标准中找到的唯一含糊的相关报价。 涉及无符号操作数的计算永远不能溢出,因为无法用所得的无符号整数类型表示的结果的模数要比该所得的类型可以表示的最大值大一模。 我想可以用这个引号来表示,当右操作数较大时,该操作将被调整为在取模截数的上下文中有意义。 即 为0x0000 - 0x0001的== 0X 1 0000 - 0x0001的== 0xFFFF的 与使用依赖于实现的签名语义相反: 0x0000-0x0001 ==(无符号)(0 + -1)==(0xFFFF也是0xFFFE或0x8001) 哪种解释正确?完全定义了吗?


5
在C / C ++中进行无符号左移之前的掩盖是否过于偏执?
这个问题的动机是由我在C / C ++中实现加密算法(例如SHA-1),编写与平台无关的可移植代码以及彻底避免未定义的行为引起的。 假设标准的加密算法要求您实现此目的: b = (a << 31) & 0xFFFFFFFF 其中a和b是无符号的32位整数。注意,在结果中,我们丢弃了最低有效32位以上的任何位。 作为第一个幼稚的近似值,我们可以假设int在大多数平台上该宽度为32位,因此我们可以这样写: unsigned int a = (...); unsigned int b = a << 31; 我们知道该代码不会在任何地方都起作用,因为int在某些系统上为16位宽,在其他系统上为64位,甚至可能为36位。但是使用stdint.h,我们可以使用以下uint32_t类型来改进此代码: uint32_t a = (...); uint32_t b = a << 31; 这样我们就完成了,对吧?这就是我多年以来的想法。... 不完全的。假设在某个平台上,我们有: // stdint.h typedef unsigned short uint32_t; 在C / C ++中执行算术运算的规则是,如果类型(例如short)比窄int,则将其扩展到int所有值都适合的范围,unsigned int否则。 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.