C語言左移運算子對越界的處理

2021-10-19 10:06:41 字數 399 閱讀 4003

今天試了兩段**

int i = 64;

uint64 x = 1l《原以為會輸出0,但是在我的risv-v gcc編譯器上執行結果為1

另乙個**

uint64 y = 1l << 64;

這個**執行後發現y的值為0.符合我的預期.不過這就導致了乙個疑問,按我的理解x和y的值應該一樣才對.為什麼現在不一致呢.於是又實驗了乙個**

int i=65;

uint64 z = 1l《這次z的值為2,即二進位制的10.

現在事情就比較明朗了,這個gcc編譯器對左移運算子的處理方式比較有意思,對編譯時的常量,是先計算,然後擷取.

而對類似x《可見編譯時的《計算和執行時的《還是有區別的,不能想當然.必須自己通過**實際驗證才行.

C 左移運算子過載

通過cout 物件,列印出複數的實部和虛部,這樣一來,就需要過載cout類的位移 運算函式,但是我們並不能拿到cout原始碼,在visual studio我們看到的也僅僅是他的定義 若想訪問c1的私有屬性,則應當宣告為友元函式 通過定義可以看出cout類的返回值是ostream型別的變數out vo...

c ,左移運算子的過載

在c 中,提供了運算子過載的方式,來讓程式的可用性更強 這裡,介紹一下左移運算子 左移運算子的過載可以幫助我們更好的輸出自定義的資料型別,可以做到簡潔,在不浪費更多 行的情況下,使用函式,來輸出類中的成員屬性資料 這裡我們先建立乙個類 將成員屬性設定為私有,當然設定為公共型別也可以,設定私有型別是為...

c語言負數左移右移 C語言 位運算子的運算規則

位運算是指按照二進位制進行的運算,在c語言中,提供了6種的位運算子,他們分別是按位與 按位或 按位異或 按位取反 左移 和右移 這些運算子只能用整型運算元,也就是說只能用於帶符號和不帶符號的short,int,long,char型別。1 按位與 按位與是指講兩個運算元按照二進位制位進行 與 運算。兩...