比如一個有符號位的8位二進制數11001101,邏輯右移就不管符號位,如果移一位就變成01100110。算術右移要管符號位,右移一位變成10100110。
邏輯左移=算數左移,右邊統一添0
邏輯右移,左邊統一添0
算數右移,左邊添加的數和符號有關
附上代碼:
int sra(int x, int k) { int xsrl = (unsigned) x >> k; int w = sizeof(int) << 3; return xsrl |= (-1 << (w-k)); } unsigned srl(unsigned x, int k) { unsigned xsra = (int) x >> k; int w = sizeof(int) << 3; return xsra &= ~(-1 << (w - k)); }
e.g:1010101010,其中[]位是添加的數字
邏輯左移一位:010101010[0]
算數左移一位:010101010[0]
邏輯右移一位:[0]101010101
算數右移一位:[1]101010101