char 与 unsigned char的区别和取值范围

1.char和unsigned char 都是一个byte,8个bit。char是无符号类型,首位bit是符号位。

2.取值范围不同:

(1)unsigned char的取值范围:0~2^8-1(0~255)

(2)char的取值范围:-2^7~2^7-1(-128~127)

-128->二进制(1,000,0000)->反码(1,111,1111)->补码(1,000,0000)

-1->二进制(1,000,0001)->反码(1,111,1110)->补码(1111,1111)

3.反码和补码定义:

负数的反码是将其原码除符号位之外的各位求反 

负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。

正数的原码,反码和补码一样 

 

转载于:https://www.cnblogs.com/yaosj/p/6707731.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字段结构 允许NULL值的字段,数据库在进行比较操作时,会先判断其是否为NULL,非NULL时才进行值的必对。因此基于效率的考虑,所有字段均不能为空,即全部NOT NULL; 预计不会存储非负数的字段,例如各项id、发帖数等,必须设置为UNSIGNED类型。UNSIGNED类型比非UNSIGNED类型所能存储的正整数范围大一倍,因此能获得更大的数值存储空间; 存储开关、选项数据的字段,通常使用tinyint(1)非UNSIGNED类型,少数情况也可能使用enum()结果集的方式。tinyint作为开关字段时,通常1为打开;0为关闭;-1为特殊数据,例如N/A(不可用);高于1的为特殊结果或开关二进制数组合(详见Discuz!中相关代码); MEMORY/HEAP类型的表中,要尤其注意规划节约使用存储空间,这将节约更多内存。例如cdb_sessions表中,就将IP地址的存储拆分为4个tinyint(3) UNSIGNED类型的字段,而没有采用char(15)的方式; 数据库设计的性能与效率全文共6页,当前为第1页。任何类型的数据表,字段空间应当本着足够用,不浪费的原则,数值类型的字段取值范围见下表: 数据库设计的性能与效率全文共6页,当前为第1页。 字段类型 存储空间(b) UNSIGNED 取值范围 tinyint 1 否 -128~127 是 0~255 smallint 2 否 -32768~32767 是 0~65535 mediumint 3 否 -8388608~8388607 是 0~16777215 int 4 否 -2147483648~2147483647 是 0~4294967295 bigint 8 否 -9223372036854775808~9223372036854775807 是 0~18446744073709551615 SQL语句 所有SQL语句中,除了表名、字段名称以外,全部语句和函数均需大写,应当杜绝小写方式或大小写混杂的写法。例如select * from cdb_members;是不符合规范的写法。 很长的SQL语句应当有适当的断行,依据JOIN、FROM、ORDER BY等关键字进行界定。 通常情况下,在对多表进行操作时,要根据不同表名称,对每个表指定一个1~2个字母的缩写,以利于语句简洁和可读性。 如下的语句范例,是符合规范的: $query = $db->query("SELECT s.*, m.* FROM {$tablepre}sessions s, {$tablepre}members m WHERE m.uid=s.uid AND s.sid='$sid'); 定长与变长表 包含任何varchar、text等变长字段的数据表,即为变长表,反之则为定长表。 对于变长表,由于记录大小不同,在其上进行许多删除和更改将会使表中的碎片更多。需要定期运行OPTIMIZE TABLE以保持性能。而定长表就没有这个问题; 如果表中有可变长的字段,将它们转换为定长字段能够改进性能,因为定长记录易于处理。但在试图这样做之前,应该考虑下列问题: 使用定长列涉及某种折衷。它们更快,但占用的空间更多。char(n) 类型列的每个值总要占用n 个字节(即使空串也是如此),因为在表中存储时,值的长度不够将在右边补空格; 而varchar(n)类型的列所占空间较少,因为只给它们分配存储每个值所需要的空间,每个值再加一个字节用于记录其长度。因此,如果在char和varchar类型之间进行选择,需要对时间与空间作出折衷; 变长表到定长表的转换,不能只转换一个可变长字段,必须对它们全部进行转换。而且必须使用一个ALTER TABLE语句同时全部转换,否则转换将不起作用; 数据库设计的性能与效率全文共6页,当前为第2页。有时不能使用定长类型,即使想这样做也不行。例如对于比255字符更长的串,没有定长类型; 数据库设计的性能与效率全文共6页,当前为第2页。 在设计表结构时如果能够使用定长数据类型尽量用定长的,因为定长表的查询、检索、更新速度都很快。必要时可以把部分关键的、承担频繁访问的表拆分,例如定长数据一个表,非定长数据一个表。例如Discuz!的cdb_members和cdb_memberfields表、cdb_forums和cdb_forumfields表等。因此规划数据结构时需要进行全局考虑; 进行表结构设计时,应当做到恰到好处,反复推敲,从而实现最优的数据存储体系。 运算与检索 数值运算一般比字符串运算更快。例如比较运算,可在单一运算中对数进行比较。而串运算涉及几个逐字节的比较,如果串更长的话,这种比较还要多。 如果串列的值数目有限,应该利用普通整型或emum类型来获得数值运算的优越性。 更小的字

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值