日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重拾C,一天一点点_3

發布時間:2025/3/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重拾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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。