逻辑移位和算数移位

一劳永逸地理解逻辑移位和算术移位问题——与有无符号数_数据溢出_可移植性问题

https://blog.csdn.net/yinchao163/article/details/53019218?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.topblog&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.topblog&utm_relevant_index=6

注意算数左移会溢出:

取一字节为例,能表示的数字从 -128 ~ 127
先看正数,比如 9,就是 0000 1001,最高位(符号位)和数据最高位都是 0. 左移得到 0001 0010 也就是 18
再看负数 -9,就是 -(0000 1001) 也就是 1111 0110 + 1 即 1111 0111,最高位(符号位)和数据最高位都是 1. 左移后是 1110 1110,反过来是 (1110 1101 + 1)->0001 0010,就是 -18 了。
如果数据最高位和符号位不同的话,说明这个数字的绝对值已经超过 64 了,那么左移一位后必然溢出。
所以一个【有效的】左移最高位和数据最高位必然一致。故算术左移和逻辑左移一样。

 所以得出结论= 当数据的最高位和符号位不同时,此时进行算术左移会导致符号的变化,从而超出该数据的设定的范围大小,从而溢出,这点要注意

 

posted on 2022-04-09 10:01  lh03061238  阅读(173)  评论(0编辑  收藏  举报

导航