仅是无符号数操作,左移动N位,是乘以2的N次方
右移N位,是除以2的N次方
带符号数操作,丢弃符号位最高位,0补最低位。
总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多
移位操作符的两个操作数必须是整型的。整个移位表达式的值的类型也是整型的,而且,左移位操作符与右移位操作符的运算并不对称。
一切以在内存中的存储形式有关!
常见应用
左移相当于*2,只是要注意边界问题。如char a = 65; a<<1 按照*2来算为130;但有符号char的取值范围-128~127,已经越界,多超出了3个数值,所以从-128算起的第三个数值-126才是a<<1的正确结果。
而右移相当于除以2,只是要注意移位比较多的时候结果会趋近去一个非常小的数,如上面结果中的-1,0。
总结:实际以编译器运行调试为准,移位一定要考虑到值的范围。
左移右移
原创xingyuan1hao ©著作权
©著作权归作者所有:来自51CTO博客作者xingyuan1hao的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
左移 右移 逻辑右移 算术右移
左移只有一种:规则:丢弃最高位,往左移位,右边空出来的位置补0右移有两种:1. 逻辑右移:丢弃最低位,
左移 右移 逻辑右移 算术右移 无符号数 -
逻辑左移、算术左移、逻辑右移、算术右移区别
逻辑左移、算术左移、逻辑右移、算术右移区别
javascript -
spring boot yml文件配置jvm参数
使用Spring Boot,配置工作将会变得更加简单,我们只需要在application.properties中定义属性,然后在代码中直接使用@Value注入即可。 如下:book.author=xxxbook.name=yyy book.pinyin=测试 这里专门设置了中文,因为中文不做特殊
springboot profile springboot 中文乱码 springboot 日志乱码 springboot+jsp中文乱码 springboot接收中文乱码 -
linux下cmake编译opencv
1、下载安装CMake for Linux 下载地址:http://www.cmake.org/cmake/resources/software.html 我下载的版本是cmake-2.8.10.2,下载文件cmake-2.8.10.2.tar.gz 建立安装文件夹,
linux下cmake编译opencv ubuntu12.04 OpenCV2.4.4 Linux OpenCV