怎么算%u%x%o的输出值

img

img

假设有一个 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

你应该是不知道负数的转换规则,看懂了这些,剩下的就可以明白了,如果实在还是不明白,去复习一下转码规则

进制转换:二进制、八进制、十六进制、十进制之间的转换_Obito_TXP的博客-CSDN博客 将二进制、八进制、十六进制转换为十进制二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。假设当前数字是 N 进制,那么:对于整数部分,从右往左看,第 i 位的位权等于Ni-1 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。更加通俗的理解是,假设一个多位数(由多个数字组成的数)某位上的数字是 1,那么它所表示的数值大小就是该位的位权。1) 整数部分例如,将八进制数字53627 转换成十进制:53627 =5×84+ ... https://blog.csdn.net/Obito_TXP/article/details/120421086

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