【问题标题】:(Obj C) What if a smaller unsigned integer is divided by a larger unsigned integer?(Obj C)如果一个较小的无符号整数除以一个较大的无符号整数怎么办?
【发布时间】:2015-02-03 19:12:57
【问题描述】:

我是新手,也是 Objective C 的新手。我尝试了一些示例 while 循环程序,但有些东西我根本不明白。 我已将所有变量“v”、“u”和“remainder”设置为无符号整数。

unsigned int v, u, temp;    
NSLog(@"Please key in 2 non-negative integers");
scanf("%u %u", &u, &v);   
    while (v != 0) {
        temp = u % v;
        u = v;
        v = temp;
        NSLog(@"Value of v is %u, value of u is %u, value of temp is %u", v, u, temp);
    }       
 }
return 0;
}

我不明白的部分是“temp = u % v”。 我知道“%”运算符用于查找 u 除以 v 的余数,然后将其分配给变量“temp”。

首先我尝试了分别存储在变量 u 和 v 中的值 150 和 35。当程序执行时,“temp”被赋值为 10(在第一个循环中),因为 150/35 (u/v) 剩下 10。

我决定切换值;现在我分别为 u 和 v 分配了 35 和 150 的值。 我预计“temp”为 0,因为 35/150 (u/v) 根本没有余数,因为它是一个分数。但不知何故,“temp”被赋值为 35(在第一个循环中),我就是不知道为什么。

为什么“temp”的值是 35?我试图用谷歌搜索“35 除以 150 的余数”来弄清楚为什么 % 运算符给了我 35 作为余数,但我找不到任何答案。 谢谢。

【问题讨论】:

    标签: objective-c operators arithmetic-expressions


    【解决方案1】:

    % 不执行除法。对于无符号数,较小数除以较大数的余数始终是较小数本身。

    回想一下

    Dividend = Divisor * Quotient + Remainder
    

    Divisor 大于Dividend 时,Quotient 为零。因此

    Dividend = Remainder
    

    【讨论】:

    • 商为0,因为变量“v”和“u”都是整数,所以运算是按照整数运算规则进行的,也就是说商“0.233333”的小数位被丢弃,将商保留为 0?这是一个正确的说法吗?
    • @solomonbstoner 是的,这是正确的。 Remainder 仅对整数除法有意义 - 一旦您允许实数除法,余数就消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2021-04-27
    相关资源
    最近更新 更多