我正在编写一个整数到字符串的转换函数,该函数接受参数的整数值(基数)。整数参数(基数)的有效范围非常小(2-36),小于字符的最大大小。所以我想把参数声明为char,但我必须用所说的参数乘以long-long int,我想知道这到底是怎么回事。我不想将参数声明为char,如果这会给计算过程增加任何额外的内容。所以我的问题是,当我把一个长整型数乘以一个字符,计算本身会发生什么。此外,在最坏的情况下,该函数写入的数据量小于无符号字符的最大大小,因此我想使用短int对其进行索引,因为当我尝试使用字符取消引用指针时,会收到警告。所以我的问题是,为什么指针不能被字符解引用,当我将索引的值增加或减少1时,使用短int作为索引是否会给解引用过程或计算过程添加任何内容。这些行为是一致的吗?因为我听说某些系统上的16位整数数据类型在算术方面实际上比32位的对应类型效率低,但我不知道这是不是真的。
int integer_conversion(long long int integer, char *str, short int str_size, char radix)
{
//'i' is the index variable I was talking about.
short int i = 1;
long long int radix_place = 1;
if(str == NULL) return -1;
if(str_size <= 0) return -2;
if(integer < 0)
{
//radix_place(long long int) * radix(char)
for(; integer / radix_place <= -radix; radix_place *= radix, i++);
i++;
if(i > str_size) return -4;
str[i] = '\000';
i--;
if(radix >= 2 && radix <= 10)
{
for(; i >= 1; i--)
{
//integer(long long int) mod radix(char)
str[i] = -(integer % radix) + '0';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else if(radix >= 11 && radix <= 36)
{
for(; i >= 1; i--)
{
//integer(long long int) mod radix(char)
str[i] = -(integer % radix);
//Is any type of conversion or promotion preformed here?
if(str[i] <= 9) str[i] += '0';
else str[i] += '7';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else return 2354;
str[0] = '-';
}
else
{
//radix_place(long long int) * radix(char)
for(; integer / radix_place >= radix; radix_place *= radix, i++);
if(i > str_size) return -4;
str[i] = '\000';
i--;
if(radix >= 2 && radix <= 10)
{
for(; i >= 0; i--)
{
//integer(long long int) mod radix(char)
str[i] = integer % radix + '0';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else if(radix >= 11 && radix <= 36)
{
for(; i >= 0; i--)
{
//integer(long long int) mod radix(char)
str[i] = integer % radix;
//Is any type of conversion or promotion preformed here?
if(str[i] <= 9) str[i] += '0';
else str[i] += '7';
//integer(long long int) / radix(char)
integer /= radix;
}
}
else return 2354;
}
return 0;
}
这包括两个部分:
>
效率。在现代处理器上,在大多数地方声明比int
短的类型没有效率提升,例如函数参数和局部变量。如果您正在编写小型微控制器,也许char
或无符号char
参数会很有用。
正确性。所有整数类型(包括char
)都将首先提升到int
,除非它们不适合,在这种情况下,它们会提升到无符号int
,除非它们不适合。然后“通常的算术转换”将大多数操作中的两种类型提升到相同的类型。
举个例子:
char c;
long long x;
return c * x;
在这种情况下,结果是:
return ((long long) c) * x;
(除非,也许,sizeof(long long)==1
,CHAR_BIT==64
,并且char
默认情况下是无符号的。但这是一个彻头彻尾的病态案例。)
使用int
而不是短
。
int integer_conversion(long long int integer, char *str, int str_size, int radix)
{
// don't bother with "short"
int i = 1;
long long int radix_place = 1;
if(str == NULL) return -1;
if(str_size <= 0) return -2;
问题内容: 如果在表的一列中,我希望这些值是“是”,“否”或“可选”,那么我需要使用哪种数据类型? 问题答案: 少量: 占用1个字节,但是最多可以将8个BIT字段合并到SQL Server中的单个BYTE中。 存储以下两个值之一:1(表示true)和0(表示false),因此该列需要为可空值,以便NULL作为您的第三个值传递 CHAR(1) 需要1个字节 如果不区分大小写ASCII,则为26个字符
以下代码片段输出结果是什么? var a = 1; var b = {value: 1}; var c = new Number(1); function foo(v){ v.value = "new Value"; } foo(a); foo(b); foo(c); console.log('a:',a) console.log('b:',b) console.log('c:',c
问题内容: 我想知道和占用的内存是否存在差异 。 我知道通常占用4个字节,怎么样 问题答案: 通常,热点中的Java对象使用的堆内存包括: 对象标头,由几个字节的“内务处理”信息组成; 存储器为 原始 字段,根据它们的大小(中间体N-> 32位) 用于 参考 字段的存储器(每个4字节)(整数n-> 32位) 填充:可能在对象数据之后一些“浪费”的未使用字节,以使每个对象都从一个方便的字节数开始的地
SQLAlchemy为最常见的数据库数据类型提供了抽象,并提供了一种指定您自己的自定义数据类型的机制。 类型对象的方法和属性很少直接使用。类型对象提供给 Table 定义和可以作为类型提示提供给 functions 对于数据库驱动程序返回错误类型的情况。 >>> users = Table('users', metadata, ... Column('id', Inte
列和数据类型 泛型类型 SQL标准和多个供应商类型 供应商特定类型 自定义类型 重写类型编译 扩充现有类型 typedecorator配方 将编码字符串强制为Unicode 四舍五入数字 将时区感知时间戳存储为时区原始UTC 后端不可知guid类型 封送JSON字符串 应用SQL级绑定/结果处理 重新定义和创建新的运算符 创建新类型 使用自定义类型和反射 基本类型API
这两者有什么区别?基元类型不能有“类”,可以吗?它是基元类型。没有对象具有类。 这两者有什么不同?