当存储负数时,为什么最高位是0?
create table test
(
a int unsigned not null primary key,
b varchar(20) not null
);
insert into test values (-4, 'aaa');
insert into test values (5, 'bbb');
[root@xxxxx test2]# hexdump -C -v /usr/local/mysql/data/test2/test.ibd > test.txt
那么,当存储负数时,为什么最高位是0。
我搞不清它和C/C++有什么不同。
其他信息
mysql版本:5.8引擎:innodb
首先,您的create table
代码与您的数据不匹配,您需要将列定义为有符号的,而不是无符号的(否则您显然不能存储负值)。
InnoDB通过设置最高有效位来存储正有符号整数:请注意,在您的示例中,值5
存储为80 00 00 05
,而不是00 00 0005
。负值仍然使用补码表示,但具有未设置的最高有效位。
因此,要从字节值(解释为无符号int)到有符号值,您可以将其视为减去偏移量80 00 00 00
。例如。7f ff ff fc
作为无符号的int将是2 147 483 644,减去2 147 483 648将是-4。此外,如果只按字节排序,则会得到7f ff ff fc
(-4
)...7f ff ff ff
(-1
)...80 00 00 00
(0
)...80 00 00 05
(5
)。
请注意,无符号整数按常规存储(例如,5
存储为00 00 0005
)。
问题内容: 在Java中,是否保证int始终为32位,而长为64位,而不管体系结构是32位还是64位? 问题答案: Java是平台无关的。所以是32位,并且是64位的。
问题内容: 您将使用哪种方法确定代表2 ^ x的位是1还是0? 问题答案: 我会用: (您也许可以用更少的括号摆脱掉,但我永远不记得按位运算的优先级。)
mysql:我现在想做一个用户信息表,字段中有学生学号,请问学号该用int类型还是char类型? 新手
问题内容: 在64位计算机上,Java中的int大小是32位还是64位? 问题答案: 32位。这是Java语言的功能之一,整数的大小不会随基础计算机而变化。请参阅规范的相关部分。
问题内容: 在Swift中,是否可以将最大INT值设置为UITextField? 我的用例是我有5个文本字段,它们需要具有最大的int值。这些值的范围从500一直到10,000。5个不同的文本字段中的每个字段将具有不同的最大值。我不能使用选择器或下拉列表,因为增量将是1。UISlider太难了,无法“擦入”数字。 如果最大int值为5,000,则用户不能(在数字键盘的键盘类型上)输入大于5000的
CSV文件通常是如何生成的?用逗号还是分号?你有什么建议吗?