這篇文章主要是總結(jié)C語言的位運算幾個實戰(zhàn)例子,接著介紹數(shù)組的基本定義用法、數(shù)組排序、插入、拼接、刪除、字符串查找替換等。
1. 顏色轉(zhuǎn)換的例子
1.顏色轉(zhuǎn)換的例子: RGB888 RGB565 RGB666….
int data=12345; //RGB888的顏色
要求將data轉(zhuǎn)為RGB565 -去掉高位
示例:
/*
int data=101010101010101010101010 11184810
R:01010
G:101010
B:01010
0101010101001010 21834
10101010
00111111
*/
#include
int main(int argc, char * argv[])
{
unsigned short rgb565_c;
unsigned int data=11184810; //RGB888
unsigned char r=(data>>16)&0xFF;
unsigned char g=(data>>8)&0xFF;
unsigned char b=(data>>0)&0xFF;
printf("RGB88_r=0x%X\n",r);
printf("RGB88_g=0x%X\n",g);
printf("RGB88_b=0x%X\n",b);
r&=0x1F; //5
g&=0x3F; //6
b&=0x1F; //5
rgb565_c=(r<<11)|(g<<5)|(b<<0);
printf("rgb565_c=%d\n",rgb565_c);
return 0;
}
2. 位運算綜合練習
2.位運算綜合練習
#include
int main(int argc,char **argv)
{
/*1. 存放數(shù)據(jù)*/
data|='A'<<24;
data|='B'<<16; //F
data|='C'<<8;
data|='D'<<0;
/*2. 修改數(shù)據(jù)*/
data&=~(0xFF<<8*2); //清除指定位
data|='F'<<16;
/*3. 取出數(shù)據(jù)*/
printf("%c\n",(data>>24)&0xFF);
printf("%c\n",(data>>16)&0xFF);
printf("%c\n",(data>>8)&0xFF);
printf("%c\n",(data>>0)&0xFF);
return 0;
}
3. 位運算實際的運用
3.實際的運用
short c1=1234; //R占11~15位 G占2~7位
short c2=4567; //B占 11~15位
RGB565;
要求: 將以上RGB分量提取出來,存在另一個變量(16位的變量)中—RGB565 。
unsigned int data_1; //整型 4個字節(jié)
unsigned short data_2; //短整型 2個字節(jié)
unsigned long data_3; //長整型 4個字節(jié)
unsigned long long data_3; //雙長整型 8個字節(jié)
示例:
/*
short c1=1234; //R占11~15位 G占2~7位
short c2=4567; //B占 11~15位
c1=101010101010101010101010 11184810
c2=101010101010101010101010 11184810
r: 10101
g: 101010
b: 10101
rgb565=1010110101010101 44373
*/
#include
int main(int argc, char * argv[])
{
unsigned int c1=11184810;
unsigned int c2=11184810;
unsigned char r,g,b;
unsigned short c3;
/*1. 轉(zhuǎn)換為RGB888*/
r=c1>>8;
g=c1&0xFF;
b=c2>>8;
/*2. 轉(zhuǎn)換為RGB565*/
r=r>>3;
g=g>>2;
b=b>>3;
/*3. 組合顏色*/
c3=(r<<11)|(g<<5)|(b<<0);
printf("c3=%d\n",c3);
return 0;
}
4. 數(shù)組特點介紹
內(nèi)存空間: 都是連續(xù)的---線性空間。
數(shù)組類型定義: <數(shù)據(jù)類型> 數(shù)組的名稱[數(shù)組的大小];
int buff[100];
數(shù)組的特性:
(1)數(shù)組的空間是連續(xù)的。 就是同類型變量的集合
(2)數(shù)組里只能存放相同類型的數(shù)據(jù)
(3)數(shù)組的下標是從0開始
(4)數(shù)組在定義的時候,必須得有一個合法空間。 int buff[];
#include
int main(int argc, char * argv[])
{
int buff_int[100]; //空間是多大? 400字節(jié)
//下標范圍: 0~99
char buff_char[100]; //空間是多大?100字節(jié)
//下標范圍:0~99
return 0;
}
數(shù)組示例:
#include
int main(int argc, char * argv[])
{
int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以數(shù)據(jù)數(shù)量為準
int buff2[1]; //空間定義必須大于0
printf("%d\n",buff1[0]); //1
printf("%d\n",buff1[2]); //3
printf("%d\n",buff1[4]); //5
return 0;
}
數(shù)組的數(shù)據(jù)倒序輸出:
#include
int main(int argc, char * argv[])
{
int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以數(shù)據(jù)數(shù)量為準
int i;
for(i=0;i<10;i++)
{
printf("%d ",buff1[9-i]);
}
return 0;
}
//數(shù)組的初始化
/*
1. 數(shù)組什么時候可以整體賦值?只有在數(shù)組定義的時候
2. 數(shù)組的空間必須是常量 (C89)
錯誤:
int data=100;
int buff[data];
3. 數(shù)組的下標是從0開始
*/
數(shù)組定義:
(1)一維數(shù)組 char data[100];
(2)二維數(shù)組 char data[100][100];
(3)三維數(shù)組 char data[100][100][100]; ………….
題目:
#include
int main(int argc, char * argv[])
{
int i;
float buff[5]; //buff的名稱是首地址
float sum=0;
printf("輸入成績:");
for(i=0;i<5;i++)
{
scanf("%f",&buff[i]);
}
for(i=0;i<5;i++)
{
sum+=buff[i];
}
printf("sum=%f\n",sum/5);
return 0;
}
5. *號顯示中文
6. 顯示中文
通過*號打印出自己的名字。
#include
int main(int argc, char * argv[])
{
unsigned char buff[]={0x08,0x08,0x7E,0x4A,0x7E,0x08,0x08,0x08};
int i,j;
unsigned char data;
for(i=0;i<8;i++)
{
data=buff[i];
for(j=0;j<8;j++)
{
if(data&0x80)printf("*");
else printf(" ");
data<<=1; //依次判斷高位
}
printf("\n");
}
return 0;
}
/*
8*8
0000 1000 0x08
0000 1000 0x08
0111 1110 0x7E
0100 1010 0x4A
0111 1110 0x7E
0000 1000 0x08
0000 1000 0x08
0000 1000 0x08
*/
漢字顯示示例代碼:
#include
int main(int argc, char * argv[])
{
unsigned char buff[]=
{
/*-- 文字: 中 --*/
/*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
};
int i,j;
int cnt=0;
unsigned char data;
for(i=0;i<32;i++)
{
data=buff[i];
for(j=0;j<8;j++)
{
if(data&0x80)printf("*");
else printf(" ");
data<<=1; //依次判斷高位
cnt++;
}
if(cnt==16)
{
cnt=0;
printf("\n");
}
}
return 0;
}
6. 數(shù)組的數(shù)據(jù)插入
1.數(shù)組的數(shù)據(jù)插入:
int a[]={1,2,3,4,5,6,7}; 在第2位數(shù)據(jù)后插入一個888
最終 int a[]={1,2,888,3,4,5,6,7};
#include
int main(int argc, char * argv[])
{
int buff[50]={1,2,3,4,5,6,7,8,9,10};
int addr=2; //插入的位置(以正常數(shù)字計數(shù))
int len=10; //源數(shù)組里的數(shù)據(jù)長度
int data=888; //將要插入的數(shù)據(jù)
int i;
/*1. 依次將數(shù)據(jù)向后移動*/
for(i=len-1;i>=addr-1;i--)
{
buff[i+1]=buff[i];
}
buff[addr-1]=data; //插入數(shù)據(jù)
len++; //長度加1
/*2. 打印最終的結(jié)果*/
for(i=0;i;i++)>
7. 數(shù)組數(shù)據(jù)的刪除
2.數(shù)組數(shù)據(jù)的刪除
int a[]={1,2,3,4,5,6,7}; 將第2位數(shù)據(jù)刪除掉
最終 int a[]={1,3,4,5,6,7};
#include
int main(int argc, char * argv[])
{
int buff[50]={1,2,3,4,5,6,7,8,9,10};
int addr=2; //刪除的位置(以正常數(shù)字計數(shù))
int len=10; //源數(shù)組里的數(shù)據(jù)長度
int i;
/*1. 向前覆蓋數(shù)據(jù)*/
for(i=addr-1;i;i++)>
8. 數(shù)組數(shù)據(jù)排序----冒泡排序
8. 數(shù)組數(shù)據(jù)排序----冒泡排序
3.數(shù)組數(shù)據(jù)排序----冒泡排序
int a[]={1,2,3,4,5,6,7}; 最終 int a[]={7,6,5,4,3,2,1};
?基本排序
#include
int main(int argc, char * argv[])
{
//將要排序的數(shù)組
int buff[10]={12,67,34,89,54,15,90,58,66,88};
int tmp;
int i,j;
int len=10; //數(shù)組的長度
//排序
for(i=0;ibuff[j+1])
{
tmp=buff[j];
buff[j]=buff[j+1];
buff[j+1]=tmp;
}
}
}
for(i=0;i
int main(int argc, char * argv[])
{
//將要排序的數(shù)組
int buff[10]={1,2,3,4,5,6,7,8,9,10};
int tmp;
int i,j;
int len=10; //數(shù)組的長度
int cnt=0;
//排序
for(i=0;i;i++)>;j++)>;i++)>;i++)>
9. 數(shù)組拼接
9. 數(shù)組拼接
4.數(shù)組數(shù)據(jù)的拼接
int a[]={1,3,4,5,6,7}; int b[]={11,13,14,15,16,17};
將a和b拼接到c數(shù)組里。 最終int c[]={1,3,4,5,6,7, 11,13,14,15,16,17}
示例:
#include
int main(int argc, char * argv[])
{
int buff1[50]={1,2,3,4,5,6,7,8,9,10};
int buff2[10]={11,12,13,14,15,16,17,18,19,20};
int len1=10; //源數(shù)據(jù)長度
int len2=10; //插入的數(shù)據(jù)長度
int i;
for(i=0;i;i++)>
10. 字符串查找與替換
10. 字符串查找與替換
字符串數(shù)組有一個約定: 結(jié)尾有’\0’
char buff[]={'A','B','C','D'}; //字符數(shù)組定義
char buff[]="ABCD"; //字符串數(shù)組定義
char buff[]={'A','B','C','D','\0'}; //字符串數(shù)組定義
“” //雙引號之前默認有’\0’
#include
int main(int argc, char * argv[])
{
char str[]="嵌入式開發(fā)"; //字符串數(shù)組--文本數(shù)據(jù)
int i=0;
for(i=0;str[i]!='\0';i++){}
printf("i=%d\n",i);
return 0;
}
?查找與替換
#include
int main(int argc, char * argv[])
{
int buff[]={123,456,123,56,567,123,567};
int cnt=0,i=0;
for(i=0;i<7;i++)
{
if(buff[i]==123) //查找
{
buff[i]=888; //替換
cnt++;
}
}
printf("cnt=%d\n",cnt);
for(i=0;i<7;i++)
{
printf("%d ",buff[i]);
}
return 0;
}
作業(yè):
1.字符串排序。 “24RERFER8RTBJV”
2.字符串插入: “1234567890”
在第2個位置后面插入”ABC”
最終結(jié)果: “12ABC34567890”
3.字符串查找: “123456123abc123hbc”
查找字符串”123”的數(shù)量。 數(shù)量是3
4.字符串刪除: “1234567890”
刪除”456” 最終結(jié)果: “1237890”
5.字符串替換
字符串”1234567890”
將456替換為”888”
最終: “1238887890”
需要考慮3種情況
審核編輯:湯梓紅
;j++)>;j++)>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136827 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25947
發(fā)布評論請先 登錄
相關(guān)推薦
C語言入門教程-數(shù)組
數(shù)組
本節(jié)我們將用C寫一個小程序隨機生成10個數(shù),并對其進行排序。我們將使用一種新的變量結(jié)構(gòu)
發(fā)表于 07-29 11:03
?809次閱讀
基于C語言二分查找排序源代碼
本文檔內(nèi)容介紹了C語言歸并、選擇、直接插入、希爾、冒泡、快速、堆排序與順序、二分查找排序源代碼,分享給大家供大家參考。
發(fā)表于 01-04 11:24
?1次下載
學習C語言的目標和方法有哪些及C語言的關(guān)鍵字說明
一、學習C語言的目標主要是:1. 熟練掌握C語言的關(guān)鍵字,語法規(guī)則,程序控制等;2. 掌握基本的數(shù)據(jù)結(jié)構(gòu),數(shù)組、鏈表、棧和隊列等;3. 掌
發(fā)表于 08-02 17:34
?1次下載
C語言總結(jié)_數(shù)組全方位練習
C語言數(shù)組的練習題:涉及到數(shù)組插入、數(shù)組刪除、數(shù)組下標數(shù)據(jù)的左移右移、
C語言總結(jié)_數(shù)組知識
當前文章復盤C語言的數(shù)組: 數(shù)組定義規(guī)則、數(shù)組空間類型、數(shù)組下標使用、
c語言在數(shù)組中查找指定元素
C語言是一種通用的編程語言,廣泛應(yīng)用于各種領(lǐng)域,包括嵌入式系統(tǒng)、操作系統(tǒng)、游戲開發(fā)等。在C語言中,數(shù)組
C語言如何創(chuàng)建數(shù)組
C語言是一種非常強大和靈活的編程語言,它提供了若干數(shù)據(jù)類型來存儲和操作數(shù)據(jù)。其中之一就是數(shù)組,它可以用來存儲一系列具有相同數(shù)據(jù)類型的元素。本文將詳細介紹如何在
c語言中數(shù)組怎么定義
C語言中,數(shù)組是一種用來存儲相同類型元素的數(shù)據(jù)結(jié)構(gòu)。它可以存儲多個元素,并通過一個共同的名稱來引用這些元素。數(shù)組是一種很重要的數(shù)據(jù)結(jié)構(gòu),可以用于解決很多實際的問題。 在
評論