我在C99写了一个Multiprecision Library.根据我的代码编译的平台,我选择不同的表示基础.
所以,例如,假设在平台X上系统选择BASE = 100; 在平台上Y BASE = 10000;
假设我代表大的unsigned int如下:
typedef struct a {
big_enough_uint *digits;
unsigned int length;
unsigned int last;
} bigUint;
Run Code Online (Sandbox Code Playgroud)
所以,当我在BASE-100系统上时,我想要我的打印功能
void my_print(bigUint *A){
unsigned int i=0;
fprintf(stdout,"%d",A->digits[0]);
if(i!= A->last){
for(;i<=A->last;i++)
fprintf(stdout,"%02d",A->digits[i]);
}
printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)
在BASE-10000系统上,我希望它是类似的
void my_print(bigUint *A){
unsigned int i=0;
fprintf(stdout,"%d",A->digits[0]);
if(i!= A->last){
for(;i<=A->last;i++)
fprintf(stdout,"%04d",A->digits[i]);
}
printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)
我为什么要这样做?
假设我有以下数字:
12345600026789
Run Code Online (Sandbox Code Playgroud)
在BASE-100表示中,数字数组将是(小端形式):
12|34|56|0|2|67|89
^ ^ I want ONE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)
在BASE-10000中:
12|3456|2|6789
^ I want THREE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?
今天,我进入了以下代码片段:
classdef (Enumeration,Sealed) ClassBlabla < int8
enumeration
ALPHA(0)
BETA(1)
GAMMA(2)
end
methods (static)
function ret = doSomething()
ret = containers.Map(.......)
for i = int32(ClassBlabla.ALPHA):int32(ClassBlabla.GAMMA)
ret(i) = somethingelse(blablabla(i))
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
for中的int32(...)是什么?演员?为什么要转换为int32?ALPHA已经不是0,GAMMA已经是2吗?