重拾C,一天一点点_3
按位運算
C語言提供了6個位操作運算符,只能作用于整型操作數,即只作用于帶符號或無符號的char、short、int、long。
&??? 按位與(AND)
!????? 按位或(OR)
^???? 按位異或(XOR)
<<?? 左移
>>?? 右移
~???? 按位求反(一元運算符)
按位與運算符&經常用于屏蔽某些二進制位,例如:
?????? n = n & 01777
按位異或:當兩個操作數的對應位不同時將該位設置為1,否則為0。
int x = 1;
int y = 2;
x & y; //0
x && y ;???? //1
x???? 0000 0001
&
y???? 0000 0010
=???? 0000 0000
左移右移:移動的位數由右操作數指定(右操作數的值必須是非負值)。
x<<2把x的值左移2位,右邊空出的2位補0。
x = 1;? 0000 0001
x << 2 => 00 000100? => 4???? <=>等價對左操作數乘以4
對unsigned類型的無符號值右移時,左邊空出的部分補0;對signed類型的帶符號值進行右移時,某些機器將對左邊空出的部分用符號位填補(即“算術移位”),而另一些機器則對左邊空出的部分補0(即“邏輯移位”)。
一元運算符~用于求整數的二進制反碼,即分別將操作數各二進制位上的1變0,0變1。
x = 1;
x = x & ~077=>1 & ~(1001101) => 1 & 0110010 => 0000001 & 0110010 => 0
以下函數暫時沒搞懂
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?
賦值運算符和表達式
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運行結果為18 5 return 0; 6 } 7 /**********統計x中值為1的二進制位數**********/ 8 int bitcount(unsigned x){ 9 /*這里將x定義為unsigned類型為了保證將x右移時,無論程序在什么機器上運行,左邊空出位都將補0,而不是符號位。 */ 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?條件表達式
?? ?if(a > b)
?? ??? ?z = a;
?? ?else
?? ??? ?z = b;
?? ?z = a > b ? a : b;
;?? ?語句結束符號
{}?? ?程序塊
if-else
?? ?if(表達式)
?? ??? ?語句
if(表達式)
?? ??? ?語句
?? ?else
?? ??? ?語句
?? ?
if(表達式)
?? ?語句
else if(表達式)
?? ?語句
else if(表達式)
?? ?語句
else
?? ?語句
為避免嵌套出錯,盡量用{}括起來,也方便閱讀。如下:
?? ?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看到這些涉及到算法的代碼,好多不太理解,加油自己!
轉載于:https://www.cnblogs.com/lltong/p/3375273.html
總結
以上是生活随笔為你收集整理的重拾C,一天一点点_3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中小学学制大缩水?522模式引爆家长圈!
- 下一篇: 联盟广告新模式—图片广告