C語言對類型的轉換

C語言對類型的轉換

文章目錄

  • C語言對類型的轉換
    • 整形提升和截斷
      • 整形提升
        • 整形提升規則
        • 整形提升的意義
      • 截斷
        • 截斷規則
    • 算數轉換

我們都知道,C語言中內置了多種整形類型,占用空間從大到小,基本滿足各類使用場景(比如超長數字的運算就不屬此范疇),當程序對大小小于 int 類型的整形進行調用或是儲存時,會發生整形提升和截斷,當不同類型的數據進行計算時,會發生算數轉換

整形提升和截斷

整形提升

在C程序中,整形的算術運算總是以缺省(默認)整形類型進行運算的,即使用 int 類型進行運算。因此,在使用 char 等長度小于 int 的類型進行計算時,會發生整形提升。

整形提升規則

對于 signed 類型,高位補充符號位

對于 unsigned 類型,高位補0

注意 整形提升和截斷均是對補碼的操作

int main()
{char a = -1;//此時a為 10000001//求補碼:11111111char b = 4;//b:00000100//此時對a,b進行調用char c = 0;c = a + b;//發生整形提升//		  a:11111111 11111111 11111111 11111111//		  b:00000000 00000000 00000000 00000100//   相加:(1)00000000 00000000 00000000 00000011//    0x       00       00       00       03return 0;
}

如打印、計算等操作都會發生整形提升

整形提升的意義

通過整形提升,可以對CPU中的運算器件進行復用

對于大多數現代的 CPU 架構來說,整數運算器通常會以特定的字長(word length)為單位進行計算。這個字長通常是指 CPU 寄存器的位數,比如32位或64位,當CPU為32位時,會以 int 為單位進行計算

因此,即使是兩個 char 類型的計算,也要轉換成兩個 int 類型之間的計算。即先轉換成 int ,再進行運算

當一個表達式中包含了大于 int 的類型時,寬度超過了 CPU 字長,在運算時需要進行額外的處理,比如拆分成多個操作數進行運算、進行額外的位操作等

截斷

以上面這段代碼為例,得到的 c 仍舊為 4 bytes ,顯然無法存入 char,此時發生截斷

截斷規則

從低位開始,按照存入空間的大小對整形進行截斷,保留低位,丟棄高位

如 char c = 00000011


以下是一個對整形提升和截斷的規則進行解析的例子

//使用不當時,整形提升和截斷也會造成一些問題
#include <stdio.h>
int main()
{char a = -128;// 10000000 00000000 00000000 10000000// 11111111 11111111 11111111 01111111// 11111111 11111111 11111111 10000000// 截斷,存入a// 10000000 -- a// 整形提升,有符號數,高位補1// 11111111 11111111 11111111 10000000// 打印無符號printf("%u\n", a);//4294967168// %u - 打印無符號整數printf("%d\n", a);// 11111111 11111111 11111111 10000000// 認為是負數,求原碼// 10000000 00000000 00000000 01111111// 10000000 00000000 00000000 10000000// -128return 0;
}

算數轉換

當不同類型的整形之間進行運算時,需要將整形轉換為同一類型后進行計算

下面這個表格中位置較低的類型,在遇到位置較高的類型時,會發生算數轉換

類型
long double
double
float
unsigned long
long
unsigned int
int
short
char

long long 和 long double 的優先級尚不明確(我還沒有找到明確解析)

long double 在 C99 標準中被引入,用以表示更高精度的浮點數

長度可能會應編譯器和平臺的不同而產生差異,可能和 double 一樣長,可能更長(8/12/16Bytes)

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

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

相關文章

【【C語言簡單小題學習-1】】

實現九九乘法表 // 輸出乘法口訣表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜數字的游戲設計 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

源碼視角,vue3為什么推薦用ref,而不是reactive

ref 和 reactive 是 Vue3 中實現響應式數據的核心 API。ref 用于包裝基本數據類型&#xff0c;而 reactive 用于處理對象和數組。盡管 reactive 似乎更適合處理對象&#xff0c;但 Vue3 官方文檔更推薦使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

Java 中對包含關系的判斷

本文將為您詳細講解 Java 中對包含關系的判斷&#xff0c;包括數組、字符串等&#xff0c;并提供相應的代碼例子。 1. 數組包含關系判斷 在 Java 中&#xff0c;數組包含關系判斷通常使用循環來實現。以下是幾種常見的判斷方法&#xff1a; 示例 1&#xff1a;使用 for…

Unity曲柄滑塊四桿機構運動計算

一、運動效果 二、機構的介紹 曲柄長度&#xff1a;a&#xff0c;線段AB長度 連桿長度&#xff1a;b&#xff0c;線段BC長度 偏心距離&#xff1a;e&#xff0c;滑塊軌跡與曲柄中心點A的垂直距離 三、已知點A點B和e的值&#xff0c;計算C點的位置 1、計算s的值 var h math.…

通過多進程并發方式(fork)實現服務器(注意要回收子進程)

以下內容為視頻學習記錄。 1、父進程accept后返回的文件描述符為cfd以及用于創建連接的lfd; 調用fork()創建子進程后&#xff0c;子進程繼承cfd,lfd&#xff0c;通過該cfd與連接過來的客戶端通信,lfd對子進程來說沒用&#xff0c;可以直接close(lfd); 對于父進程來說&#x…

雙非二本找實習前的準備day4

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;背誦的八股的問題也在這里記錄了 今日碎碎念&#xff1a; 1&#xff09;偶爾還是貪玩游戲&…

Vue中的計算屬性和方法有什么區別?

Vue.js是一款流行的JavaScript前端框架&#xff0c;提供了豐富的功能和便捷的開發方式。在Vue中&#xff0c;計算屬性和方法是常用的兩種方式來處理數據和邏輯。但它們之間存在一些區別&#xff0c;本文將詳細介紹Vue中計算屬性和方法的區別&#xff0c;并通過示例代碼加深理解…

183896-00-6,Biotin-C3-PEG3-C3-NH2,可以選擇性降解靶蛋白

您好&#xff0c;歡迎來到新研之家 文章關鍵詞&#xff1a;183896-00-6&#xff0c;Biotin-C3-PEG3-C3-NH2&#xff0c;Biotin-C3-PEG3-C3-amine&#xff0c;生物素-C3-PEG3-C3-胺 一、基本信息 【產品簡介】&#xff1a;Biotin-PEG3-C3-NH2是一種PROTAC linker&#xff0c;…

381. 有線電視網絡(網絡流,最小割,《算法競賽進階指南》)

381. 有線電視網絡 - AcWing題庫 給定一張 n 個點 m 條邊的無向圖&#xff0c;求最少去掉多少個點&#xff0c;可以使圖不連通。 如果不管去掉多少個點&#xff0c;都無法使原圖不連通&#xff0c;則直接返回 n。 輸入格式 輸入包含多組測試數據。 每組數據占一行&#xf…

Python推導式大全與實戰:精通列表、字典、集合和生成器推導式【第115篇—python:推導式】

Python推導式大全與實戰&#xff1a;精通列表、字典、集合和生成器推導式 Python語言以其簡潔、優雅的語法而聞名&#xff0c;其中推導式是其獨特之處之一。推導式是一種在一行代碼中構建數據結構的強大方式&#xff0c;它涵蓋了列表、字典、集合和生成器。本篇博客將全面介紹…

YOLOv8實例分割實戰:ONNX模型轉換及TensorRT部署

課程鏈接&#xff1a;https://edu.csdn.net/course/detail/39320 PyTorch版的YOLOv8支持高性能的實時實例分割。 TensorRT是針對英偉達GPU的加速工具。 ONNX &#xff08;Open Neural Network Exchange&#xff09; 作為一個開放的網絡模型中間表示&#xff08;IR&#xff0…

Redis命令大全

通用命令 KEYS pattern&#xff1a;查找所有符合給定模式&#xff08;pattern&#xff09;的 key。EXISTS key&#xff1a;檢查指定 key 是否存在。TYPE key&#xff1a;返回指定 key 的數據類型。DEL key [key …]&#xff1a;刪除指定的 key。RENAME key newkey&#xff1a;…

spring boot 修復 Spring Framework URL解析不當漏洞(CVE-2024-22243)

漏洞描述 當應用程序使用UriComponentsBuilder來解析外部提供的URL&#xff08;如通過查詢參數&#xff09;并對解析的URL的主機執行驗證檢查時可能容易受到Open重定向攻擊和SSRF攻擊&#xff0c;導致網絡釣魚和內部網絡探測等。 受影響產品或系統 6.1.0 < Spring Framew…

Vue項目的快速搭建

Vue項目的快速搭建 一、下載并安裝node.js二、安裝Vue腳手架三、創建vue項目四、項目啟動五、VS Code下載安裝 一、下載并安裝node.js 首先確保已經安裝了Node.js。如果沒有安裝&#xff0c;可以去官網&#xff08;https://nodejs.org/&#xff09;下載并安裝最新版本的Node.j…

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹TM1638鍵盤數碼管模塊概述TM1638鍵盤數碼管…

mybatis-傳遞參數的方式

mybatis 傳遞參數的7種方法 在實際開發過程中&#xff0c;增刪改查操作都要涉及到請求參數的傳遞&#xff0c;今天這節就集中講下在mybatis中傳遞參數的7中方法 單個參數的傳遞很簡單沒有什么好將的&#xff0c;這里主要說下多個參數的傳遞 1、第一種方式 匿名參數 順序傳遞…

[electron]窗口 BrowserWindow

優雅的顯示窗口 const {app, BrowserWindow} require(electron);function createMainwindow(){const mainwindow new BrowserWindow({x: 300,y: 400,width: 600,height: 600,});mainwindow.loadFile(index.html); }app.on(ready, ()>{createMainwindow(); });對于這樣的代…

前端發起請求,后端模型需處理很久,怎樣設置前端直接完成請求響應,后端計算完在返回結果給前端?

在這種情況下&#xff0c;可以采用異步處理的方式來解決。具體步驟如下&#xff1a; 前端發起請求&#xff1a;前端向后端發送請求&#xff0c;但是不等待后端處理完成而是立即得到響應。 后端異步處理&#xff1a;后端接收到請求后&#xff0c;不立即進行處理&#xff0c;而是…

Codeforces Round 886 (Div. 4)----->E. Cardboard for Pictures

一&#xff0c;思路&#xff1a; 這題我們可以通過二分 w來直接得到答案&#xff0c;時間復雜度是nlogn的級別&#xff0c;但是這里有個很坑的地方&#xff0c;就是假如你用二分做&#xff0c;會面臨報 long long 的問題&#xff0c;但是問題不大&#xff0c;直接用 unsigned …

題目:金三銀四求職季:如何脫穎而出

題目&#xff1a;金三銀四求職季&#xff1a;如何脫穎而出 引言&#xff1a; 隨著春天的腳步漸近&#xff0c;對于許多程序員來說&#xff0c;一年中最繁忙、最重要的面試季節也隨之而來。金三銀四&#xff0c;即三月和四月&#xff0c;被廣大程序員視為求職的黃金時期。在這兩…