-2

基数 10 の数値を基数 36 の数値に変換する小さなプログラムがあります。これが Python コードで、期待どおりに動作します。

def numToKey(num):
    start = 0x04;
    i = 0;
    for i in range(0,num):
        start+=1
    return start;


def largeNumToKeyboard(num):
    a = num / 1296;
    ar = num % 1296;
    b = ar / 36;
    c = ar % 36;

    a = numToKey(a);
    b = numToKey(b);
    c = numToKey(c);

    newb = b;
    if(a == b):
        newb = 0x2D;

    if(c == b):
        c = 0x2E;


    print a,newb,c
    print

largeNumToKeyboard(0)
largeNumToKeyboard(200)

出力は

4 45 46
4 9 24

「4 45 46」は正しく 0 を表し、「4 9 24」は正しく 200 を表します。

しかし、問題は、C コードに変換した後に動作しなくなることです。

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello world\n");
    largeNumToKeyboard(0);
    largeNumToKeyboard(200);
    return 0;
}

char numToKey(char num) {
    char start = 0x04;
    char i = 0;
    for (i = 0; i < num; i++) {
        start++;
    }
    return start;
}

void largeNumToKeyboard(int num) {
    char a = num / 1296;
    char ar = num % 1296;
    char b = ar / 36;
    char c = ar % 36;

    a = numToKey(a);
    b = numToKey(b);
    c = numToKey(c);
    char newb = b;
    if(a == b){
        newb = 0x2D;
    }
    if(c == b){
        c = 0x2E;
    }
    printf("%d ",a);
    printf("%d ",newb);
    printf("%d\r\n",c);

}

今、出力は

4 45 46
4 45 46

入力が 200 の場合、C コードでは間違った出力が返されるのに、Python コードでは正しい出力が返される理由がわかりません。モジュラスと関係があるような気がしますが、わかりません。助けてください!ありがとう!

4

2 に答える 2