คำถามติดแท็ก 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

30
ผลลัพธ์ที่ไม่คาดคิดเมื่อทำงานกับจำนวนเต็มที่มากในภาษาที่ตีความ
ฉันพยายามที่จะได้รับผลรวมของ1 + 2 + ... + 1000000000แต่ฉันได้รับผลตลกใน PHP และNode.js PHP $sum = 0; for($i = 0; $i <= 1000000000 ; $i++) { $sum += $i; } printf("%s", number_format($sum, 0, "", "")); // 500000000067108992 Node.js var sum = 0; for (i = 0; i <= 1000000000; i++) { sum += i …

1
เร็วกว่า bit-shift สองเท่าสำหรับ Python 3.x จำนวนเต็ม?
ฉันดูที่แหล่งที่มาของsort_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 …

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)ถูกต้องหรือไม่? อันที่สองฉันไม่รู้ …

4
การลบจำนวนเต็มไม่ได้ลงนามกำหนดพฤติกรรมหรือไม่
ฉันเจอรหัสจากใครบางคนที่ดูเหมือนจะเชื่อว่ามีปัญหาในการลบจำนวนเต็มที่ไม่ได้ลงชื่อออกจากจำนวนเต็มอื่นที่เป็นประเภทเดียวกันเมื่อผลลัพธ์เป็นลบ ดังนั้นรหัสแบบนี้จะไม่ถูกต้องแม้ว่าจะใช้งานได้กับสถาปัตยกรรมส่วนใหญ่ก็ตาม unsigned int To, Tf; To = getcounter(); while (1) { Tf = getcounter(); if ((Tf-To) >= TIME_LIMIT) { break; } } นี่เป็นเพียงคำพูดที่เกี่ยวข้องอย่างคลุมเครือจากมาตรฐาน C ที่ฉันหาได้ การคำนวณที่เกี่ยวข้องกับตัวถูกดำเนินการที่ไม่ได้ลงนามไม่สามารถเกิน fl โอ๊ยได้เนื่องจากผลลัพธ์ที่ไม่สามารถแสดงโดยประเภทจำนวนเต็มที่ไม่ได้ลงนามที่เป็นผลลัพธ์จะลดโมดูโลจำนวนที่มากกว่าค่าที่มากที่สุดค่าหนึ่งที่สามารถแสดงโดยประเภทผลลัพธ์ได้ ฉันคิดว่าอาจใช้คำพูดนั้นเพื่อหมายความว่าเมื่อตัวถูกดำเนินการด้านขวามีขนาดใหญ่ขึ้นการดำเนินการจะถูกปรับให้มีความหมายในบริบทของตัวเลขที่ถูกตัดทอนโมดูโล กล่าวคือ 0x0000 - 0x0001 == 0x 1 0000 - 0x0001 == 0xFFFF เมื่อเทียบกับการใช้ความหมายที่ลงนามขึ้นอยู่กับการใช้งาน: 0x0000 - 0x0001 == (ไม่ได้ลงนาม) (0 + …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.