『壹』 在c語言中<<是什麼意思
先說左移,左移就是把一個數的所有位都向左移動若干位,在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語言中"<>"符號是什麼意思
C語言中<是小於,>是大於,但是並沒有<>符號。C語言的不等於是!=
C++中倒是用模板初始化時會用<>來填數據類型
『叄』 c語言中符號<<是什麼意思
符號<<在C語言中代表了左移運算符。
<<用來將一個數的各二進制位全部左移若干位,移動的位數由右操作數指定,右操作數必須是非負值,其右邊空出的位用0填補,高位左移溢出則舍棄該高位。
(3)c語言lt擴展閱讀
將a的二進制數左移2位,右補0。若a=15,即二進制數00001111,左移2位得00111100,即十進制數60(為簡單起見,用8位二進制數表示十進制數15,如果用16位二進制數表示,結果是一樣的)。高位左移後溢出,舍棄。
左移一位相當於該數乘以2,左移2位相當於該數乘以2^2=4。上面舉的例子15<< 2=60,即乘了4。但此結論只適用於該數左移時被溢出舍棄的高位中不包含1的情況。
例如,假設以一個位元組(8位)存一個整數,若a為無符號整型變數,則a=64,即二進制數01000000時,左移一位時溢出的是0。而左移2位時,溢出的高位中包含1,則不符合上述結論。
『肆』 數據結構C語言,LT(L.r[i].key, L.r[i-1].key)與L.r[i].key<L.r[i-1].key有什麼區別呢
LT可能是個宏定義,展開後和後者沒有區別,如果邏輯表達式過長,LT這種看起來能清爽一些。
L.r[i].key一定是能比較大小的
L.r[i]則未必,就是說L.r[i] < L.r[i-1]可能是無法通過編譯的,因為兩個結構體比較大小是沒有定義這種比較的。
『伍』 c語言中<=是什麼意思
->是一個整體,它是用於指向結構體、C++中的class等含有子數據的指針用來取子數據。換種說法,如果我們在C語言中定義了一個結構體,然後申明一個指針指向這個結構體,那麼我們要用指針取出結構體中的數據,就要用到「->」.
舉個例子:
struct Data
{
int a,b,c;
}; /*定義結構體*/
struct Data * p;/*定義結構體指針*/
struct Data A = {1,2,3};/*聲明變數A*/
int x;/*聲明一個變數x*/
p = &A ; /*讓p指向A*/
x = p->a;/*這句話的意思就是取出p所指向的結構體中包含的數據項a賦值給x*/
/*由於此時p指向A,因而 p->a == A.a,也就是1*/
對於一開始的問題 p = p->next;這應該出現在C語言的鏈表,這里的next應該是一個與p同類型的結構體指針,其定義格式應該是:
struct Data
{
int a;
struct Data * next;
};/*定義結構體*/
…………
main()
{
struct Data * p;/*聲明指針變數p*/
……
p = p->next;/*將next中的值賦給p*/
}
鏈表指針是C語言的一個難點,但也是重點,學懂了非常有用。要仔細講就必須先講變數、指針。
什麼是變數?所謂變數,不要淺顯的認為會變得量就是變數。套用我們院長的問話:「教室變不變?」變,因為每天有不同的人在裡面上課,但又不變,因為教室始終在那,沒有變大或變小。這就是變數:有一個不變的地址和一塊可變的存儲空間。正常情況下,我們只看到變數這個房間裡面的東西,也就是其內容,但不會關注變數的地址,但是C語言的指針,就是這個房間的地址。我們聲明變數就相當於蓋了間房子存放東西,我們可以直接觀看房子里的東西,而聲明指針,就是相當於獲得了一個定位器,當用指針指向某個變數時,就是用指針給變數定位,以後我們就可以用指針找到他所「跟蹤」的變數並可以獲得裡面的內容。
那結構體呢?結構體就相當於是有好幾個房子組成的別墅,幾個房子綁定在一起使用。假設現在有很多這種別墅分布在一個大迷宮里,每間別墅里都有一間房子。裡面放了另一個別墅的位置信息,現在你手拿定位器找到了第一棟別墅,從裡面得到了你想要的東西(鏈表的數據部分),然後把下一棟別墅的位置計入你的定位器(p = p->next),再走向下一棟別墅……如此走下去,知道走到某地下一棟別墅信息沒有了(p->next == NULL),你的旅行結束。這就是鏈表一次遍歷的過程。現在你能明白 p=p->next的含義了吧!
寫了這么多。希望你能明白。
如果想學好c和C++,鏈表和指針必須熟練掌握!
『陸』 C語言里字元LT是什麼
C語言沒有LT,通常支持LT的都是邏輯判斷 less than
C語言裡面應該是 <
『柒』 一句c語言不懂 LT=(a&0xF0)5:0;
這句話的意思如果問號前的語句為真 則LT=5 如果假 LT=0
『捌』 <>C語言中什麼意思
1、C語言中的 >>= 意思為:右移後賦值
代碼示例為:
x >>=3;
右移後結果為:
(8)c語言lt擴展閱讀:
1、C語言運算符的優先順序順序
運算符的優先順序從高到低大致是:單目運算符、算術運算符、關系運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。
2、比特右移運算符的位移
比特右移(>>)運算符可以是算術(左端補最高有效位)或是邏輯(左端補 0)位移。例如,將 11100011 右移 3 比特,算術右移後成為 11111100,邏輯右移則為 00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。