學習筆記7-C語言-進制轉換、原返補、位運算、函數

進制轉換

為什么要使用二、八進制、十六進制?因為現在的CPU只能識別高低兩種電流,因此只能對二進制數據進行運算二進制數據雖然可以直接被cpu識別,但不方便人們書寫、記錄,所以把二進制數據轉換成八進制是為了方便記錄在文件中。隨著cpu的不斷發展,位數不斷增加,由早期的8位逐漸發展成了現在的64位,因此八進制逐漸不能滿足需求,所以發展出了十六進制,由于歷史原因,八進制還不能退出歷史舞臺(文件權限:rwx=4+2+1)十進制轉換二進制:求余法: 用2對數據進行求余,然后對商繼續求余,直到商為0結束,過程中產生的余數就是該數據的二進制(逆序)n%2 = 0|1商%2 = 0|1直到商為零求權法:從高位到低位,用數據-2^(n-1),如果可以減,那么第n位的二進制數就是1,否則0練習1:輸入一個正整數顯示該數據的n(n>=2)進制,超出10的數用字母顯示
#include<stdio.h>int main(int argc,const char* argv[])
{int num,n;printf("輸入數和進制");scanf("%d%d",&num,&n);int cnt=0;char a[32]={};while(num){a[cnt++]=num%n;	num /= n;}for(int i=cnt-1;i>=0;i--){if(a[i]>9){printf("%c",'A'+a[i]-10);}else{printf("%hhd",a[i]);	}}
}
二進制轉十進制:(其他進制轉10進制也適用)第n位數據*2^(n-1),然后求和,得到的數據就是該數的十進制注意:二進制轉換成八進制或十六進制只是為了更方便的記錄二進制數據二進制轉八進制: 三位二進制位對應一個八進制位二進制 : 1 011 011 010 010 110八進制 :1  3   3   2   2   6二進制轉十六進制: 四位二進制位對應一個十六進制位二進制: 1011 0110 1001 0110十六進制:B    6    9    6  在C代碼中:以0開頭的數據都是八進制,以0x開頭的都是16進制數據。%o 以八進制顯示數據%x 以十六進制顯示數據%#o、%#x 以對應的進制顯示數據,并加上開頭前綴顯示

原碼、反碼、補碼

原碼: 數據的二進制就是原碼 
反碼:正數反碼就是原碼負數的反碼是它的原碼除符號位外,其余位按位取反
補碼:正數的補碼就是它的原碼負數的補碼:1、轉換二進制原碼2、原碼符號位不變,按位求反得反碼3、反碼+1得補碼補碼轉數據:無符號補碼直接轉換成十進制有符號的補碼:最高位0:是正數,直接轉10進制最高位1:是負數1、補碼-1 得反碼2、反碼符號位不變,其余各位按位取反3、原碼轉成10進制

位運算符: & | ~ ^ >> <<

A & B 按位相與
01101101  0x6D
10011110  0x9E
--------------
00001100  0x0CA | B 按位相或
01101101  0x6D
10011110  0x9E
--------------
11111111  0xFF~A  按位求反
01101101  0x6D
--------------
10010010  0x92A ^ B 按位異或:不同出1,相同出0
01101101  0x6D
10011110  0x9E
--------------
11110011  0xF3A << n 按位左移:把A的補碼向左移動n位,左邊丟棄,右邊補零
01101101 << 4  0x6D
--------------
11010000  0xD0A >> n 按位右移:把A的補碼向右移動n位,右邊丟棄,左邊補符號位
01101101 >> 4  0x6D
--------------
00000110  0x06練習2:輸入一個整數,把它的4~7位設置為1010,其他位不變(n & ~(0xf << 4)) | (0xA << 4)
#include<stdio.h>
#include<stdint.h> 
int main(int argc,const char* argv[])
{uint32_t num=0;scanf("%u",&num);num = (num & ~(0xf <<4))|(0xA<<4);printf("%u\n",num);
}
練習3:輸入倆整數,把A的4~7位設置為B的3~6位
#include<stdio.h>
#include<stdint.h> 
int main(int argc,const char* argv[])
{uint32_t a=0,b=0;scanf("%u%u",&a,&b);a = a & ~(0xf0) | (b<<1 & 0xf0);printf("%u",a);
}

函數:function 方法

一段具有某項功能的代碼的集合,是C語言中管理代碼的最小單位
把代碼封裝成一個個函數,是為了方便管理和調用代碼。函數的分類:標準庫函數:C語言標準委員會為C語言以函數形式提供的一些基礎的功能,被封裝在libc.so中,使用時需要包含頭文件,只需要寫 函數名(參數) 調用即可。<ctype.h>int isalnum(int c);功能:當c為數字、字母時返回真int isalpha(int c);功能:當c為字母時返回真int isdigit(int c);功能:當c為數字時返回真int islower(int c);功能:當c為小寫字母時為真int isupper(int c);功能:當c為大寫字母時為真以下函數都是libm.so 中:sqrtpowdouble floor( double arg );功能:返回小于等于arg的最大整數double ceil( double num );功能:返回大于等于num的最小整數double fabs( double arg );功能:返回arg的絕對值#include <time.h>time_t time(time_t *time);#include <stdlib.h>  int system(const char *command);#include <stdlib.h>  void srand(unsigned seed);功能:種隨機種子int rand(void);功能:獲取一個隨機數練習4:獲取10個范圍是[100,1001)的隨機數
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc,const char* argv[])
{srand(time(NULL));int num[10]={};for(int i=0;i<10;i++){num[i]=rand()%901+100;printf("%d ",num[i]);}
}
        練習5:隨機出一組雙色球中獎號碼:6個紅球 1-33不重復1個藍球 1-16
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(int argc,const char* argv[])
{srand(time(NULL));int red[6]={};int i=0,j=0;while(i<6){int k=0;red[i]=rand()%33+1;for(j=0;j<i;j++){if(red[i]==red[j]){k++;break;}}if(k==0)i++;}int blue=rand()%16+1;for(i=0;i<6;i++){printf("%d ",red[i]);	}printf("\n%d",blue);}
    系統函數:(不是函數)是操作系統以函數接口形式提供的一些功能,這些功能包括:內存管理、信號處理、文件IO、文件管理、進程管理、進程通信、線程管理、線程同步、網絡通信第三方庫函數:glog  日志記錄md5   驗證JSON  序列化和反序列化自定義函數:為了更好的管理代碼、減少冗余把代碼封裝成函數形式注意:一個函數盡量不超過50行(軟規定)一個函數負責一個功能(硬性規定)函數聲明:函數聲明的目的是為了告訴其他代碼函數的調用形式返回值類型 函數名(類型1 變量1,類型2 變量2,... )1、C語言中函數名一般全部小寫,用下劃線分隔2、如果不需要參數建議寫void,不要空著3、如果不需要返回值建議寫void隱式聲明:當調用函數時沒有定義,就會產生隱式聲明,編譯器猜測函數的格式,返回值會猜測成int類型,參數列表會根據調用時提供的參數來猜測函數定義:返回值類型 函數名(類型1 變量1,類型2 變量2,... ){函數體;return val;}注意:如果定義寫在調用之前,函數聲明可以省略函數調用:函數名(實參)返回值會放在調用時的位置,可以立即使用,也可以用變量記錄下來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443461.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習筆記8-作業

作業1&#xff1a;實現一個函數&#xff0c;判斷一個整數是否是素數&#xff0c;調用該函數來顯示出100~10000之間的所有素數 #include<stdio.h> #include<stdbool.h> #include<math.h> bool is_sushu(int num) {for(int i2;i<sqrt(num);i){if(num%i0)re…

學習筆記9-C語言-傳參、類型限定符、遞歸

函數傳參&#xff1a; 1、形參變量屬于它所在的函數&#xff0c;出了該函數就不能使用 2、實參與形參之間都是以賦值的形式進行數據傳遞&#xff08;值傳遞&#xff09; 3、return 其實是把返回值數據放置到一個公共的區域&#xff08;函數和函數調用者&#xff09;&#xff0…

Oracle創建視圖實現獲取當前數據所在的頁數,這里以每頁2條數據分頁

摘要&#xff1a;Oracle創建視圖實現獲取當前數據所在的頁數&#xff0c;這里以每頁2條數據分頁&#xff0c;詳細請看&#xff1a; 一&#xff1a; DROP VIEW MIP.TB_CMS_FLGTINFO_D_VIEW;/* Formatted on 2014/12/4 8:35:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE FOR…

學習筆記10-C語言-小項目-五子棋

小項目&#xff1a; 需要的數據 1、定義棋盤的二維數組 2、定義變量用于記錄下棋的坐標 3、定義角色 黑棋 O 白棋 * 空位業務邏輯&#xff1a; 是否需要對數據初始化 for(;;) {1、清屏、顯示棋盤2、落子坐標是否合法、該位置是否有棋子3、判斷是否五子連珠4、交換角色5、顯示…

學習筆記11-C語言-指針

什么是指針&#xff1a; 指針是一種特護的數據類型&#xff0c;使用它可以定義指針變量&#xff0c;指針變量存儲的是整型數據&#xff0c;代表內存的編號&#xff0c;通過這個編號可以訪問到對應內存。為什么使用指針 1、函數與函數之間是相互獨立的&#xff0c;但是有些時候…

學習筆記12-C語言-堆內存、字符串

什么是堆內存&#xff1a; 是進程中的一個內存段&#xff08;text\data\bss\heap\stack&#xff09;&#xff0c;由程序猿手動控制。 特點是足夠大&#xff0c;缺點是使用麻煩為什么要使用堆內存&#xff1a; 1、隨著程序的復雜&#xff0c;數據會越來越多。 2、其他的內存段…

學習筆記13-C語言-字符串函數、緩沖區

字符串的常用函數: #include<string.h> size_t strlen(const char* s); 功能&#xff1a;計算字符串長度&#xff0c;但是結果不包括\0 返回值&#xff1a;返回字符串中字符的個數size_t str_len(const char* str) {assert(NULL ! str);const char* tmp str;while(*tmp…

Oracle數據庫里面查詢字符串類型的字段不為空和為空的SQL語句:

摘要&#xff1a;近期項目中&#xff0c;在做高級查詢的時候有個條件是根據選擇的字段&#xff0c;然后再選擇字段的值為空和不為空做查詢&#xff0c;在寫SQL語句的時候費了很長時間&#xff0c;現在記錄一下&#xff0c;方便日后查看&#xff1a; 一&#xff1a;查詢字符串類…

學習筆記14-C語言-小項目-通訊錄

通訊錄&#xff1a; 要求&#xff1a; 姓名&#xff0c;性別、電話&#xff0c;最多儲存50個聯系人 功能&#xff1a;1、添加聯系人2、按名字刪除聯系人3、按姓名修改聯系人信息4、查找聯系人&#xff0c;可通過電話&#xff0c;名字查找&#xff0c;支持模糊查找5、顯示所有聯…

學習筆記15-C語言-預處理指令、條件編譯、頭文件

預處理指令&#xff1a; 程序猿編寫的代碼不是標準C代碼&#xff0c;并不能被真正的編譯器索編譯&#xff0c;需要一段程序把代碼翻譯一下。 翻譯的過程叫做預處理&#xff0c;被翻譯的代碼叫做預處理指令&#xff0c;以#開頭的都是預處理指令查看預處理的過程&#xff1a;gcc…

學習筆記16-C語言-小項目-使用Makefile完成2048

Makefile: Makefile是一系列編譯指令組成的可執行文本&#xff0c;也叫做編譯腳本。 在終端執行make命令會自動執行Makefile腳本中的編譯命令&#xff0c; 而且它還可以根據文件的最后修改時間來判斷哪些文件是否需要重新編譯、哪些文件不需要重新編譯&#xff0c;從而大大提高…

學習筆記17-C語言-結構、聯合、枚舉

結構&#xff1a; struct 結構是由程序猿自己設計的一種數據類型&#xff0c;用于描述一個事務的各項數據&#xff0c;由若干個不同的基礎數據類型組成。設計結構&#xff1a;struct 結構體名{類型 成員名&#xff1b;...}&#xff1b;定義結構體變量struct 結構體名 變量名&a…

Maven 3.0.5 安裝和配置:

摘要&#xff1a;現在的Web項目越來越多的都用maven管理了&#xff0c;所以我也抽時間學習學習&#xff0c;為了趕上時代&#xff01; 一&#xff1a;首先到maven官網&#xff1a;http://maven.apache.org/&#xff0c;然后選擇相應的版本下載&#xff0c;我這里下載的是maven…

學習筆記18-C語言-文件

文件的分類&#xff1a; 文本文件&#xff1a; 存儲的是ASCII碼值的二進制 二進制文件&#xff1a; 存儲的是數據的補碼文件IO&#xff1a; FILE *fopen(const char *path, const char *mode); 功能&#xff1a;打開或者創建文件 path&#xff1a;文件的路徑 mode&#x…

使用INNER JOIN ON 多表關聯查詢,獲取指定用戶下指定權限的資源SQL:

摘要&#xff1a;最近在看一個開源框架&#xff0c;其中用戶&#xff0c;角色&#xff0c;資源&#xff0c;這塊我感覺比較重要&#xff0c;所以就自己也模仿著寫了下&#xff0c;其中在獲取指定用戶下的權限資源的時候遇到問題了&#xff0c;開始時&#xff0c;我首先想到的方…

Maven學習記錄之maven基本操作命令,maven本地工廠的創建,maven骨架的生成,以及在eclipse中創建maven工程:...

摘要&#xff1a;今天又學習了一下maven&#xff0c;之前是下載并安裝和配置好了maven的環境&#xff0c;今天主要學習的內容包括&#xff1a;maven本地工廠的創建&#xff0c;maven骨架的生成命令&#xff0c;maven在dos下創建maven工程&#xff0c;以及在eclipse中創建mavne工…

Oracle中通過游標執行帶參數的存儲過程實現解析CLOB字段內的xml字符串:

摘要&#xff1a;近來之前的項目數據出現了問題&#xff0c;原因是由于之前在設計數據庫的時候把時間字段設置成了字符串格式&#xff0c;所以給后期的數據操作帶來了很大的麻煩&#xff0c;這里提醒一下各位程序猿&#xff0c;以后在開發項目的時候時間字段一定要是時間字段&a…

Eclipse中使用Checkstyle,checkstyle插件檢查java代碼的自定義配置文件:

摘要&#xff1a;近來項目組在搞代碼檢查&#xff0c;所以領導讓把checkstyle這個插件搞明白&#xff0c;現在我把我們寫的自定義的checkstyle.xml文件記錄一下&#xff0c;以便大家可以一起使用&#xff1a; 一&#xff1a;要使用checkstyle插件在eclipse中檢查java代碼&…

Linux 下安裝 jdk-7u75-linux-x64.gz,jdk1.7.0_75,jdk1.7步驟:

摘要&#xff1a;近來又用到了Linux系統&#xff0c;所以就又新裝了一個虛擬機和CentOS 6.4來用&#xff0c;搞開發的程序猿們可能都知道&#xff0c;在現在的很多企業中&#xff0c;生產環境大多都是Linux服務器&#xff0c;并且用的比較多的大都是CentOS&#xff0c;Red hat系…

Win7+VMware10.0+CentOS 6.4+Tomcat,Win7訪問不了CentOS6.4上的Tomcat

摘要&#xff1a;今天在linux下安裝Tomcat后&#xff0c;在虛擬機本地通過:http://localhost:8080/可以訪問安裝好的Tomcat服務器&#xff0c;但是在本機就不能訪問&#xff0c;前提是在本機下可以ping的通虛擬機的IP地址的&#xff0c;最后經過Google&#xff0c;發現說可能是…