主要是有符号数的左移。
有的说不管符号位,直接左移,所以可以一会正数一会复数
https://bbs.csdn.net/topics/391075092
有的说符号位不动,其他来左移
不明白了。。。。
https://blog.csdn.net/hnjzsyjyj/article/details/119721014
https://wenku.baidu.com/view/6e31935402f69e3143323968011ca300a6c3f60d.html?wkts=1682661838416
算术移位对应有符号位数,逻辑移位对应无符号位数
左移与符号无关,都是逻辑左移(对应SHL指令),而右移无符号数做逻辑右移(对应SHR指令)、有符号数做算术右移(对应SAR指令)。 不过这也是与语言相关的,在Pascal中,移位一律是逻辑移位,算术移位要用乘除。
对于无符号数的左移和右移,因为不涉及到符号位的问题,比较好理解:
左移低位补零,高位舍弃
右移高位补零,低位舍弃
对于有符号数的左移和右移,因为符号位的参与,可能各个编译器的实现方式上有差别
我在/home/utils/gcc-5.2.0/bin/g++ 这个g++编译器的版本上试了下:
左移低位补零,高位舍弃(和无符号数的实现相同),这意味着本来一个正数,在移位的过程中,可能一会儿变成负数,一会儿又变回正数,然后再变负数···这种跳跃的情况。
右移高位补符号位,低位舍弃。所以如果一个int类型的-1, 进行右移操作,无论进行多少次,结果仍然为-1,因为-1 = 1111 1111 1111 1111 1111 1111 1111 1111b.文章来源:https://www.toymoban.com/news/detail-428729.html
另外,char类型,其实是一个int8_t类型,是一个有符号的8bit整数类型。
————————————————
:https://blog.csdn.net/baidu_35679960/article/details/124510929文章来源地址https://www.toymoban.com/news/detail-428729.html
到了这里,关于有符号数和无符号数左移和右移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!