重拾C,一天一点点_3
按位運(yùn)算
C語(yǔ)言提供了6個(gè)位操作運(yùn)算符,只能作用于整型操作數(shù),即只作用于帶符號(hào)或無(wú)符號(hào)的char、short、int、long。
&??? 按位與(AND)
!????? 按位或(OR)
^???? 按位異或(XOR)
<<?? 左移
>>?? 右移
~???? 按位求反(一元運(yùn)算符)
按位與運(yùn)算符&經(jīng)常用于屏蔽某些二進(jìn)制位,例如:
?????? n = n & 01777
按位異或:當(dāng)兩個(gè)操作數(shù)的對(duì)應(yīng)位不同時(shí)將該位設(shè)置為1,否則為0。
int x = 1;
int y = 2;
x & y; //0
x && y ;???? //1
x???? 0000 0001
&
y???? 0000 0010
=???? 0000 0000
左移右移:移動(dòng)的位數(shù)由右操作數(shù)指定(右操作數(shù)的值必須是非負(fù)值)。
x<<2把x的值左移2位,右邊空出的2位補(bǔ)0。
x = 1;? 0000 0001
x << 2 => 00 000100? => 4???? <=>等價(jià)對(duì)左操作數(shù)乘以4
對(duì)unsigned類型的無(wú)符號(hào)值右移時(shí),左邊空出的部分補(bǔ)0;對(duì)signed類型的帶符號(hào)值進(jìn)行右移時(shí),某些機(jī)器將對(duì)左邊空出的部分用符號(hào)位填補(bǔ)(即“算術(shù)移位”),而另一些機(jī)器則對(duì)左邊空出的部分補(bǔ)0(即“邏輯移位”)。
一元運(yùn)算符~用于求整數(shù)的二進(jìn)制反碼,即分別將操作數(shù)各二進(jìn)制位上的1變0,0變1。
x = 1;
x = x & ~077=>1 & ~(1001101) => 1 & 0110010 => 0000001 & 0110010 => 0
以下函數(shù)暫時(shí)沒(méi)搞懂
1 #include <stdio.h> 2 unsigned getbits(unsigned x, int p, int n); 3 main(){ 4 int x = 123456789,y = 5, z = 2; 5 int i = getbits(x,y,z); 6 printf("%d\n",i); 7 return 0; 8 } 9 /**********返回x中從第p位開始的n位**********/ 10 unsigned getbits(unsigned x, int p, int n){ 11 return (x >> (p+1-n)) & ~(~0 << n); 12 } View Code?
賦值運(yùn)算符和表達(dá)式
i = i +2;
i += 2;
expr1 op = expr2;?? <=> (expr1) = expr1 op (expr2)
1 #include <stdio.h> 2 int bitcount(unsigned x); 3 main(){ 4 printf("%d\n",bitcount(234561789)); //c-free運(yùn)行結(jié)果為18 5 return 0; 6 } 7 /**********統(tǒng)計(jì)x中值為1的二進(jìn)制位數(shù)**********/ 8 int bitcount(unsigned x){ 9 /*這里將x定義為unsigned類型為了保證將x右移時(shí),無(wú)論程序在什么機(jī)器上運(yùn)行,左邊空出位都將補(bǔ)0,而不是符號(hào)位。 */ 10 int b; 11 for(b=0; x!=0; x>>=1){ 12 if(x & 01){ 13 b++; 14 } 15 } 16 return b; 17 } View Code?條件表達(dá)式
?? ?if(a > b)
?? ??? ?z = a;
?? ?else
?? ??? ?z = b;
?? ?z = a > b ? a : b;
;?? ?語(yǔ)句結(jié)束符號(hào)
{}?? ?程序塊
if-else
?? ?if(表達(dá)式)
?? ??? ?語(yǔ)句
if(表達(dá)式)
?? ??? ?語(yǔ)句
?? ?else
?? ??? ?語(yǔ)句
?? ?
if(表達(dá)式)
?? ?語(yǔ)句
else if(表達(dá)式)
?? ?語(yǔ)句
else if(表達(dá)式)
?? ?語(yǔ)句
else
?? ?語(yǔ)句
為避免嵌套出錯(cuò),盡量用{}括起來(lái),也方便閱讀。如下:
?? ?if(){
?? ??? ?….
}else{
?? ? ….
}
?
1 #include <stdio.h> 2 int binsearch(int x, int v[], int n); 3 main(){ 4 int arr[] = {1,2,3,4,5,6,7,8,9}; 5 printf("%d\n",binsearch(7,arr,9)); //6 6 return 0; 7 } 8 9 int binsearch(int x, int v[], int n){ 10 int low,high,mid; 11 low = 0; 12 high = n - 1; 13 while(low <= high){ 14 mid = (low + high) / 2; 15 if(x < v[mid]) { 16 high = mid - 1; 17 }else if(x > v[mid]){ 18 low = mid + 1; 19 }else{ 20 return mid; 21 } 22 } 23 } View Code看到這些涉及到算法的代碼,好多不太理解,加油自己!
轉(zhuǎn)載于:https://www.cnblogs.com/lltong/p/3375273.html
總結(jié)
以上是生活随笔為你收集整理的重拾C,一天一点点_3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中小学学制大缩水?522模式引爆家长圈!
- 下一篇: TortoiseGit for wind