左移右移位运算符
大学的时候就选修过C语言程序设计,还水水的拿了一个C语言二级证书,此后C语言仿佛就与我无关了,知道研究生第二年开始做项目,我才知道这门古老程序语言的重要性。对于数学专业的我而言,matlab确实简单好入门,处理一些数学问题来说得心应手,然而,就有些方面而言,C语言确实要比matlab好很多,最重要的原因当然是因为项目中那些难处理的规模较大的模型本体是C写的,然而翻译成matlab语言工作量实在太大而且运行效率极慢,所以不得不逼着我重新开始学习这一门古老的语言。
为什么第二篇要选择左移右移位运算符来写呢,主要是因为在我重新学习C的道路上第一个让我觉得怀疑我自己是否学过C语言的就是这块了。当然在讲主要内容之前,有一块的内容非常重要,那就是关于有符号的二进制数原码,反码,补码之间的转换了。
原码,反码,补码
首先,我想按我自己的理解说一下这三个分别是什么,对于正整数而言,它的原码和补码是一直的,而反码就是为了求解补码,所以可以不做讨论,只需关注负整数的原码,反码,补码。
原码
一个整数翻译成二进制数,就为这个整数的原码,而转化过程为,首先将绝对值通过不断模2取余,将最后一个因子作为首位之后倒叙补充各个余数所得到的二进制数放在符号位之后,正整数符号位为0,负整数符号位为1,例如
求-125的原码
- 125所得到二进制数为: 11111101
- -125 符号位取1
- -125的原码