c語言設計中兩小於號放在一起什麼意思

2021-03-08 01:32:04 字數 3122 閱讀 8784

1樓:夜禮服假面

先說左移,左移就是把一個數的所有位都向左移動若干位,在c中用《運算子.例如:

int i = 1;

i = i << 2; //把i裡的值左移2位

也就是說,1的2進位制是000...0001(這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0),左移2位之後變成000...0100,也就是10進位制的4,所以說左移1位相當於乘以2,那麼左移n位就是乘以2的n次方了(有符號數不完全適用,因為左移有可能導致符號變化,下面解釋原因)

需要注意的一個問題是int型別最左端的符號位和移位移出去的情況.我們知道,int是有符號的整形數,最左端的1位是符號位,即0正1負,那麼移位的時候就會出現溢位,例如:

int i = 0x40000000; //16進位制的40000000,為2進位制的01000000...0000

i = i << 1;

那麼,i在左移1位之後就會變成0x80000000,也就是2進位制的100000...0000,符號位被置1,其他位全是0,變成了int型別所能表示的最小值,32位的int這個值是-2147483648,溢位.如果再接著把i左移1位會出現什麼情況呢?

在c語言中採用了丟棄最高位的處理方法,丟棄了1之後,i的值變成了0.

左移裡一個比較特殊的情況是當左移的位數超過該數值型別的最大位數時,編譯器會用左移的位數去模型別的最大位數,然後按餘數進行移位,如:

int i = 1, j = 0x80000000; //設int為32位

i = i << 33; // 33 % 32 = 1 左移1位,i變成2

j = j << 33; // 33 % 32 = 1 左移1位,j變成0,最高位被丟棄

在用gcc編譯這段程式的時候編譯器會給出一個warning,說左移位數》=型別長度.那麼實際上i,j移動的就是1位,也就是33%32後的餘數.在gcc下是這個規則,別的編譯器是不是都一樣現在還不清楚.

總之左移就是: 丟棄最高位,0補最低位

再說右移,明白了左移的道理,那麼右移就比較好理解了.

右移的概念和左移相反,就是往右邊挪動若干位,運算子是》.

右移對符號位的處理和左移不同,對於有符號整數來說,比如int型別,右移會保持符號位不變,例如:

int i = 0x80000000;

i = i >> 1; //i的值不會變成0x40000000,而會變成0xc0000000

就是說,符號位向右移動後,正數的話補0,負數補1,也就是組合語言中的算術右移.同樣當移動的位數超過型別的長度時,會取餘數,然後移動餘數個位.

負數10100110 >>5(假設字長為8位),則得到的是 11111101

總之,在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變.實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多.

例:c語言中左移《表示乘以2,右移》表示除以2,這是由計算機工作原理導致的!但是要是7,二進位制數為0111,右移一位得3.

5,但是右移之後二進位制數變成0011,是3。不一樣啊,怎模解釋呢??

答:移位操作符的兩個運算元必須是整型的。整個移位表示式的值的型別也是整型的,而且,左移位操作符與右移位操作符的運算並不對稱。

0111右移一位是把最後一位的1去掉,左邊補個0,得0011,轉換為十進位制是3,這是正確的。並不等同於除以2 。

另外《也用於c++的輸入,輸出

例如cin>>

cou<<

2樓:匿名使用者

這不是c的符號,是c++的輸出流符號(包含在標頭檔案iostream中),效果同c的printf(包含在標頭檔案stdio中)語句,但是更方便。

比如printf("%d",a);

換成c++就是cout<

c#中兩個小於號在一起神馬意思?

3樓:匿名使用者

這些基礎問題msdn上都有的:

左移運算子 (<<) 將第一個運算元向左移動第二個運算元指定的位數。 第二個運算元的型別必須是一個 int 或具有向 int 的預定義隱式數值轉換的型別。

弄個0分浪費大家時間,問問題的誠意和自學能力有待提升

4樓:匿名使用者

左移運算子,相當於2進位制的1左移x位,應該是1除以2的x次方

5樓:匿名使用者

() 函式呼叫

陣列下標運算子

-> 指向成員運算子

. 成員運算子

:: 域運算子

++ 自增運算子

-- 自減運算子

! 邏輯非運算子

~ 按位取反運算子 ((好累!以下運算子三字省略))- 負號

+ 正號

* 指標

& 取地址

(type) 型別轉換

sizeof 長度

delete

* 乘法

/ 除法

% 求餘

+ 加法

_ 減法

<< 按位左移

>> 按位右移

<<= 關係

>>= 關係

== 等於

!= 不等於

& 按位與

| 按位或

&& 邏輯與

|| 邏輯或

?: 條件

6樓:邰其麴天材

這些基bai礎問題msdn上都有的:

左移du運算子

(<<)

將第zhi一個運算元向左移動dao第二個內運算元指定的位容數。

第二個運算元的型別必須是一個

int或具有向

int的預定義隱式數值轉換的型別。

弄個0分浪費大家時間,問問題的誠意和自學能力有待提升

c語言的演算法中=>這兩個符號加在一起是什麼符號

7樓:滄海雄風

沒有這個 =>

大於等於是這個 >=

小於等於是這個 <=

->是指向結構體或者類成員

8樓:ab了vo型血

我只知道》=是大於等於,但我不知道=>是什麼意思。

那個就是p=p*i的意思

用C語言程式設計計算兩個超長正整數(長度小於100)的加法

可以用字串分割成int可以處理的整數,相加後在整合成一個長字串輸出 程式很簡單,1取串長l 2建立 l 4 取整 1 長度的陣列 3將cin得到的字串4個一組轉化為int型變數順序存入陣列4建立 l 4 取整 1 長度的陣列用來存放進位5數字分別相加,最高位進位對應進位陣列置16由於相加不可能進2,...

C語言程式設計題 編寫函式,用於求兩個數中的較小數用主函式

int min int a,int b return a 如下 include int comp int a,int b int main void 用c語言編寫 編寫一個函式,要求在主函式中輸入兩個數,輸出其中最大值。比較兩個數的大小可以使用三目運算子 三目運算子 表示式1 表示式2 表示式3 其...

C語言程式設計以下程式求出兩個整數中較大的數,請填空謝謝

第一個空是int z 第二個空是return z int z return z 求c語言程式設計 輸入任意兩個整數,得出最大的數 include void main else include int main void c語言求兩個整數中的較大者,怎麼編寫 定義int a,b,c 時你多了個逗號 賦...