c語言左移一位
❶ c語言如何輸入一個整數,將整數整體左移1位,且第一位移動到最後一位,輸出.如輸入「1234」,輸出「2341」
#include <stdio.h>
int main(int argc, char** argv)
{
char stack[4];
int top = 0;
while (top < 4)
{
stack[top++] = getchar();
}
getchar(); // 讀取回車
while (top > 0)
{
putchar(stack[--top]);
}
putchar(『\n』);
return 0;
}上面這個是直接把輸入的4個字元串倒序輸出,跟整數不整數沒有關系,你們老師的意思可能是這個:#include <stdio.h>
int main(int argc, char** argv)
{
int integer;
int ret;
scanf(「%d」, &integer);
while (integer != 0)
{
ret = ret * 10 + integer % 10;
integer = integer / 10;
}
printf(「%d\n」, ret);
return 0;
}
❷ C語言按位左移運算規則
C語言中按位左移的運算符為<<,其規則如下:
對於操作a<<n,
1 按照二進制值每位向高位(書寫上是向左)移動n位;
2 最高位(最左邊的)n位捨去;
3 最低位(最右邊)填加n個0.
簡單起見,用char型舉例如下:
例一
0x12 << 3 =>
B00010010 << 3 =>
B10010 000(這里最高位的三個0被捨去,其它依次左移,最低位補三個0) =>
0x90
即0x12 << 3 = 0x90
例二
0x9E << 2 =>
B10011110 << 2 =>
B01111000 (最高位10捨去,最低位補兩個0)=>
0x78
可以編寫如下程序驗證:
#include<stdio.h>
voidcheck(chara,intn)
{
printf("0x%hhx<<%d=0x%hhx ",a,n,a<<n);
}
intmain()
{
check(0x12,3);
check(0x9e,2);
return0;
}
其運行結果為
0x12<<3=0x90
0x9e<<2=0x78
可以看到與我們計算結果是相符的。
❸ 如何用c語言實現循環左移
循環左移時,用從左邊移出的位填充字的右端,而循環右移時,用從右邊移出的位填充字的左側。這種情況在系統程序中時有使用,在一些控製程序中用得也不少。設有數據說明:
a=01111011,循環左移2位 正確結果: 11101101
過程:
b=a>>(8-2) 用來得到正常左移丟失的位和循環移位後其正確位置 b=00000001;
a=a<<2;左移 a=11101100
a=a|b; a=11101101
如果不是用中間變數 a=(a>>(8-2))|(a<<2)
總長度N(8 16 32)
循環左移n: (a>>(N-n))|(a>>n)
循環右移n: (a<<(N-n))|(a>>n)
C語言的位運算功能是其區別於其他大多數高級程序設計語言的特色之一,用它可以方便實現一些特殊功能,靈活掌握是用C程序編寫系統程序的基礎。
(3)c語言左移一位擴展閱讀:
C語言高效編程技巧:
一:以空間換時間
計算機程序中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程序的效率問題
二:數學方法解決問題
數學是計算機之母,沒有數學的依據和基礎,就沒有計算機發展,所以在編寫程序的時候,採用一些數學方法會對程序的執行效率有數量級的提高。
三:使用位操作
實現高效的C語言編寫的第三招----使用位操作,減少除法和取模的運算。
在計算機程序中,數據的位是可以操作的最小數據單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做數據變換使用,但是,靈活的位操作可以有效提高程序運行的效率。
❹ c語言左移和右移怎麼算
左移一位就是*2;
右移一位就是/2;(忽略小數);
❺ c語言中位運算的左位移右位移都是什麼意思
假設0010
左移就是把二進制數向左移動,右邊補0,0的二進制全是0,左移之後右邊再補0。
0010<<2 就是1000 實際是做的*4。
1000>>2 計算 0010 實際做的是/4。
❻ C語言中移位運算
右移對符號位的處理和左移不同,對於有符號整數來說,比如int類型,右移會保持符號位不變,例如:10100110 >>5(假設字長為8位),則得到的是 11111101。
總之,在C中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比循環效率高很多.
所以,short a=0xf245,即a=1111001001000101,經過右移後,b=a>>8;b=1111111111110010,即b=0xfff2。注意是有符號右移為算術右移!!!
❼ c語言數組左移
a數組某個下標的元素左移8位,再和0X00ff或運算,把結果賦值給c數組同下邊的元素
❽ c語言左移問題
但左移概念是左邊去掉n個二進制位,右邊補n個零,但這是指原來的二進制數是「機器數」。就是如果使用unsigned char 來存儲這個數的話,就是這樣的。
例如:0001 0010(十進制為18)左移4位,
得到的應該是0010 0000(十進制32),但是18*16≡32(模256)
當左移左邊不去零,右邊單純補零的時候得到0001 0010 0000,這時候得到的恰好是
288=18*16,但這只是單純往左移了(「丟失」了移出的4位)
如果仍是存儲在unsigned char 中的話,就仍是0010 0000(十進制32)
用左移的時候194<<4,是1100 0010 0000,若仍是存儲在unsigned char 中的話,就仍是0010 0000,這就是溢出了。