写在前面:这里是小王成长日志,一名普通在校大学生,想在学习之余将本身的学习笔记分享出来,记录本身的成长轨迹,而且帮助可能须要的人,平时博客内容主要是一些学习笔记(系统的,会附带思惟导图,就像我以前一个专栏-数据科学导论同样),项目实战笔记,一些技术的探究和本身的一些思考。欢迎你们关注,大家的每个评论点赞关注我都会仔仔细细去看的。有任何问题欢迎交流,我会尽我所能帮助你们的,共创CSDN美好环境。html
这里关于计算机中原码,反码,补码的知识受篇幅限制,这里只是简单介绍一下,更详细的讲解请前往另外一篇博客<原码,反码,补码,究竟是个啥? -?,你来这看看吧。>查看,两篇放在一块儿看效果可能更好哦。web
原码:原码是一个数在计算机中最简单的表达形式,由符号位(0正1负)和数值位(绝对值)组成svg
反码:原码除符号位外按位取反(1与0的互换),只对负数有意义,正数反码仍是本身学习
例如:spa
原码 | 反码 |
---|---|
0000 1111 | 0000 1111 |
1000 1010 | 1111 0101 |
补码:反码加1,仍是只对负数有意义,正数补码仍是本身.而负数在计算机中以其补码形式表达
例如(以-5为例):.net
原码(符号位+数值位) | 反码(除符号位外按位取反) | 补码(反码+1) |
---|---|---|
10000000 00000000 00000000 00000101 | 11111111 11111111 11111111 11111010 | 11111111 11111111 11111111 11111011 |
补码实际上是方便计算机中减法而存在的,在计算机中,减去一个数等于加上一个数的补码,这其中涉及到了“模”的概念,有兴趣或者不懂的能够先去百度百科看看日志
在计算机中无符号数用原码表示, 有符号数用补码表示xml
就像他们的名字同样区别就在于有无符号htm
以下所示:
无符号 | 有符号 | |
---|---|---|
单字节(8位) | 0~255 | -128~127 |
双字节(16位) | 0~65535 | -32768~32767 |
n位 | 0~ 2^n - 1 | - 2^n ~ 2^n - 1 |
可是补码中 +0 = -0 ,因此,-0 这个位置能够空出来,所以就在负数的区域中多出一位,由原来的 -0 ~ -127,变成 -1 ~ -128,也仍是128位,而正数方向则是0 ~ 127,也是128个数,二者是对称的。(本身能够尝试下对 -0 取补码)
原码 | 反码 | 补码 |
---|---|---|
1000 0000 | 1111 1111 | 1000 0000 |
也能够这么理解:
这样负数方向也是 -1 ~ -128,正数方向不变
二进制(1字节) | 十进制值 |
---|---|
1111 1111 | -1 |
1111 1110 | -2 |
1111 1101 | -3 |
……… | ……… |
1000 0001 | -127 |
1000 0000 | -128 |
int main(void) { char ch = 'c'; printf("%d",ch);//打印结果是99,为'c'的ancii码 printf("%c",ch+5);//打印结果为h }
可是在C语言中还有 unsigned char这个不省心的东西
其实也蛮简单的,在C语言中 unsigned char能表示的范围是 0 ~ 255,跟普通的无符号数是一致的,
而普通的char类型能表示的范围是-128 ~127,这与有符号数是同样的
最后,关于这里表示的范围其实通常只在与整数进行运算时是须要注意的,而在表示字符时咱们则不须要太过关心
都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一块儿成长吧,大家的关注是对我最大的支持。
若是以上内容有任何不许确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。