假设有一个 int 类型的数,值为3,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000011
因为int类型的数占用4字节(32位),所以前面填了一堆0。
在计算机中,负数以其正值的补码形式表达。
什么叫补码呢?这得先从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000011 是 3的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:1变0;0变1
比如:00000000 00000000 00000000 00000011的反码是11111111 11111111 11111111 11111100。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000011 的反码是:11111111 11111111 11111111 11111100。
那么,补码为:
11111111 11111111 11111111 11111100 + 1 = 11111111 11111111 11111111 11111101
所以,-3 在计算机中表达为:11111111 11111111 11111111 11111101。转换为十六进制:0xFFFFFFFD。
整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
你应该是不知道负数的转换规则,看懂了这些,剩下的就可以明白了,如果实在还是不明白,去复习一下转码规则
d 十进制
u无符号
o八进制
x十六进制
你知道什么是进制,剩下的就是数学问题
如果你没学过数学,我还真不会教了
%d 有符号10进制整数
%i 有符号10进制整数
%o 无符号8进制整数
%u 无符号10进制整数
%x 无符号的16进制数字,并以小写abcdef表示
%X 无符号的16进制数字,并以大写ABCDEF表示
%F/f 浮点数
%E/e 用科学表示格式的浮点数
%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数
%c 单个字符
%s 字符串
-1 注:反码:原码除符号位外,全部取反。补码:反码+1
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111
接下来看补码操作:
即16进制输出(%x):FFFF FFFF
%o是输出8进制:把3个1放一起读就是:
111 111 111 111 1111 111 111 111 111 111
3 7 7 7 7 7 7 7 7 7
最高位是符号位,不用读
%u是输出10进制的无符号数
1111 1111 1111 1111 1111 1111 1111 1111(2) = 2^32-1=4294967295