一、原码,反码,补码的转化
正数的原、反、补码是一样的
负数的原、反、补码不同(计算规则如下:)
原码——>反码(原码按位取反,最高符号位不变)——>补码(反码+1)
举个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/415b1a8efead17cf3363fc225b51feca.jpeg)
二、为什么存在补码
首先,我们知道,在计算机系统中,数值一律用补码来表示和储存,原因在于使用补码可以将符号位和数值域统一处理;同时,加法和减法可以统一处理(cpu只能进行加法运算),通过补码的加法运算才能得到我们想要的计算结果
举个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/73c20156273f104a2db5584b2f35d702.jpeg)
三、有符号和无符号
1、有符号就是二进制的最高位是符号位(1为负,0为正),该位只用来判断正负,不是有效数值域
2、无符号就是正数,它的二进制的最高位不是符号位,计入数值域内
例子:
![](https://i-blog.csdnimg.cn/blog_migrate/b442b7586849e821a9d02584134740b9.jpeg)
四、数据类型的范围
1、char类型
char(signed char)
数值范围:-128~127
数值的计算方法:(下面的二进制码都是补码)
最大值:01111111(127)
最小值:10000000(-128)
128的补码是怎么得到?
127的补码+1是10000000(-128的补码)
范围记忆方法:
![](https://i-blog.csdnimg.cn/blog_migrate/95c6980bccf8669c0ad10b9ff1681207.jpeg)
2、short
1、short(signed short)
范围:-32768 ~32767
2、unsigned short
范围:0~65535
总结:对于数据类型的范围能够记住就行,每一个有符号的数据类型的范围都遵循两个原则:
1、钟表原则
2、最小值的绝对值-1=最大值