菜鸟转行嵌入式_(第3天)C语言基础_进制转换及原补反码

262 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.1进制转换

		二进制:010b开头)
		八进制:0-7 	(0开头)
			777+1=01000
		十进制:0-9
			999+1 =1000
		十六进制:0-9,a-f(0x开头)
                
十进制转二进制:短除法逆序法
			10%2=0
			5%2=1
			2%2=0
			1
		1010:按权相加法
		0*2^0+1*2^1+0*2^2+1*2^3 = 10 
                
八进制转二进制:一位八进制数等于三位二进制数,不足三位左侧补0
			056     101 110
			5101
			6110
二进制转八进制:从右侧开始三位二进制数合一位八进制数,不足三位左侧补0
			1101 0110
			011 010 110
			3   2   6
十六进制转二进制:一位十六进制数分成四位二进制数,不足四位左侧补0
			0xaf
			a      f
			1010  1111
二进制转十六进制:从右侧开始每四位二进制数合一位十六进制数,不足四位左侧补0
			1111 0110 101
			0111 1011 0101
			7     B    5
			0x7B5
十六进制转十进制:
			0x5a
			5*16^1 + A*16^0=90
十进制转十六进制:短除16
十进制转八进制:短除8
八进制转十进制:
			045
			5*8^0+4*8^1=37
十六进制不能直接和八进制之间转换,需要借助二进制或十进制进行中转

单位转换: 1G=1024M 1M=1024kb 1k=1024byte 1byte = 8bit

1.2 源码/反码/补码

内存中每一个byte(字节)有一个十六进制数表示的地址

char占1byte,8bit

每一个bit能表示二进制的0或1

在计算机中,数值是以补码形式存储的;正数的原返补码都是其本身

负数:有一个符号位(最高位为负则为1,为正则为0) 源码:转换成二进制的数值 反码:在源码的基础上取反,符号位不变,原位置为0则变为1 补码:在反码的基础上+1

无符号char类型值域范围:0-255 有符号的char值域范围:-128 - 127

解析:signed char的最大值为0111 1111—>127
     signed char的最小值为1111 1111—>-127
     但由于是补码存储,-127的补码为1000 0001
     由于+0-0是没有区别的,但对于存储器和编译器来讲需要充分利用每个字节,更不想出现二义性。 所以,将-0 表示为-128,
     这样既增大了signed char 数值的表示范围,又消除了-0 的二义性。
     所以 signed char的最小值为-128
     源码:1000 0000
     反码:1111  1111
     补码:1000 0000