这表现得很好:
double t = r[1][0] * .5;
Run Code Online (Sandbox Code Playgroud)
但这不是:
double t = ((1/2)*r[1][0]);
Run Code Online (Sandbox Code Playgroud)
r 是一个二维矢量.
只是想到了一种可能性.是因为(1/2)被认为是int和(1/2) == 0?
这是代码:
#include <iostream>
using namespace std;
int main ()
{
int n;
cin >> n;
int first = n;
while (first>=10)
{
first/=10;
}
cout << first << endl;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我试图获得正数的第一个数字,我想要做的是将它放在最后一个数字之后,例如:
1934 -> 9341.
C++标准提供div(int,int),但不提供udiv(unsigned int,unsigned int).
如果我天真地在这个函数中使用无符号整数,我可以看到这会对分子中大于2 ^ 31 - 1的整数产生错误的结果.例如(带有4位半字节):
最大的4位半字节是15,1111二进制.作为有符号的半字节,这将代表-1.将15除以2得到7或0111,但将-1除以2得到0:0000.
是否有一种直接的方法来将div调整为无符号整数,或者我最好是编写自己的udiv,还是完全避免使用div和div类函数?
编辑/注意:在我的情况下,我正在使用unsigned long long ints,所以使用lldiv并不能解决问题.
我是否可以确定C++中的奇数应该总是以这样的方式返回结果的底层,即存在余数或者是否有任何例外?我的意思是:
int x = 5;
x = x/2;
cout<<x; //2
Run Code Online (Sandbox Code Playgroud) 我想在VB.NET中执行整数除法,即只保留除法结果的整个部分.
Dim a, b, c as int32
a = 3500
b = 1200
c = a/b
Run Code Online (Sandbox Code Playgroud)
这个例子输出3.
如何让它返回2?
我有一个整数n,我需要向上舍入n/4.出于性能原因,我需要在C中找到一个快速的方法.除以4可以使用>> 2移位操作来完成,但我不知道该轮.我可以使用ceil,但我担心性能.
我试图通过遵循教科书来学习基本的C编程,我必须遗漏一些关于数据类型,舍入和/或操作顺序的东西,因为当我尝试构建一个简单的程序来将秒转换为小时和分钟时,小时工作,但剩余的分钟在不应该的时候达到0.
感谢Coursera,我知道像这样的程序存在巨大的安全漏洞,但出于学习目的,我会要求你忽略安全性.现在,书籍要我坚持使用printf,scanf和while循环,因为它们对应于我正在阅读的教科书的章节(书籍让我知道,当我是一个教科书时,我会开始担心安全问题几个章节继续).
我的C程序看起来像这样:
/* Ask the user for a number of seconds, convert to X hours and Y minutes */
/* Continue doing this with a while loop until user enters 0 */
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{
const int minperhour = 60;
const int secpermin = 60;
int sec, hr;
float min;
sec = 1;
while(sec != 0)
{
printf("Enter the number of seconds to …Run Code Online (Sandbox Code Playgroud) 我输入了以下代码(并且没有编译问题或任何问题):
float y = 5/2;
printf("%f\n", y);
Run Code Online (Sandbox Code Playgroud)
输出很简单: 2.00000
我的数学没有错吧?或者我在 / 操作符上错了?这意味着分裂不是吗?5/2 应该等于 2.5?
任何帮助是极大的赞赏!
是否有可能对于两个正整数i和j,( - i)/ j不等于 - (i/j)?我无法弄清楚这是否可能......我认为这将是关于位,或char类型的溢出或东西,但我找不到它.有任何想法吗?