《2.1.4 C語言中的整數類型及類型轉換|精講篇》

后面作者會在2025.5.25 00:00前整理出筆記和思維導圖大家放心,主頁還有其他文章 請先移步歡迎參考 收藏文章 關注博主 高效學習
好了,這小節我們要探討一個相對來說簡單的問題,就是C語言里邊的那些定點整數是如何進行強制類型轉換的。好來看這樣的一個例子,首先需要跟大家聲明的是C語言當中的定點整數。
大家熟悉的什么int?啊,還有什么short還有long這些定點整數都是用補碼的形式來存儲的。另外C語言里還有一個關鍵字叫unsigned,如果用unsigned來修飾short或者int或者long。
那就意味著這個定點整數它是一個無符號數。好來看一下,現在有一個short型的短整數x,它的值是負的四三二一,那么由于是采用補碼表示的。
并且短整形是占兩個字節,也就是。16個比特,所以16個比特的補碼表示負四三二一應該是這樣的一個值,這個大家可以自己轉換一下。
源碼補碼如何轉換?這個我們之前已經強調過,不熟悉的同學可以再自己動手試一下好,現在我們。把x這個呃短整形的數。
把它強制轉換成unsigned short,也就是無符號的短整形。y那這種強制轉換的規則是會把x的這個補碼形式的數。完整不變的復制給y這個變量,那由于y也是占兩個字節。
所以y的機器代碼其實和x是一模一樣的。只不過由于y是一個無符號的短整形,因此計算機在解析y的真值的時候,會按照無符號整數來進行解析。所以這個二進制無符號數。
把轉換成真值,應該是對應這樣的一個值,同樣的,大家可以暫停來轉換一下,看看是不是這樣?
好,那這是一個有符號的定點整數轉換成長度相同的無符號定點整數的一個規則。不改變數據的二進制內容,但是會改變它的解釋方式。好。
再看第二個例子,如果我們把一個更長的數據把它變成一個更短的數據啊,這兒我們定義了兩個int型的變量a和b。那大多數情況下C語言里邊int型的數據占四個字節。那現在a和b是兩個有符號的數都用補碼的形式來保存。
當我們把a和b這兩個數強制轉換成short,也就是由四個字節變成兩個字節的時候。計算機的做法是會直接把高位截斷,然后只保留低位,那a對應的16進制應該是這樣的。
把這四個字節的內容截斷,只保留最低兩個字節的內容,也就是八六a一那更低的兩個字節,就是c這個變量的值。那由于c是一個有符號的短整形。
所以計算機會用補碼的規則來對它進行解析,與之對應的真值就應該是這樣的一個值。這是一個16比特,16位的布嗎?那對于b和d也是一樣的b這個數呃。
它用補碼表示應該是這樣的,把b轉換成只有兩個字節的d呃short類型,那么就是只保留。更低的兩個字節,七七五幺。
那同樣的,由于d它是一個有符號的短整形,所以計算機會用16比特補碼的這種方式來對它進行解析,與之對應的真值是這樣的一個值。好。
那這是更長的數據轉換成更短的數據的一個處理方式,很殘暴,就是直接截斷,只保留更低的字節。好。
最后再來看更短的數據,轉換成更長的數據,那這個問題其實我們之前聊過,也就是所謂符號擴展的問題。好x原本是一個兩個字節的補碼呃。
總共占16位,那么把short型的x轉換成四字節的int型。計算機做的事情就是符號擴展,那之前我們說過,對于一個定點整數的補碼來說。
如果它是一個負數。那么,我們需要在高位呃,也就是這個符號位和原有的數值位之間添一用,這樣的方式擴展得到的補碼。
你把它解析為真值的話,這個真值是不會變的。只不過是補碼的整體長度拓展了而已,好再來看n這個變量呃,我們把x強制的轉換為無符號類型。
然后把它復制給無符號的短整型n。那之前我們說過,這種強制轉換會把二進制代碼原封不動的復制給n,只不過計算機會以無符號數的規則來解析這一串機器數。那這是n所對應的一個真值好。
最后把無符號數n變成四個字節的無符號數p。那由于是無符號數到無符號數的轉變,因此直接在高位添零就可以。p和n的真值,這個真值是保持不變的。
好,那這就是C語言里邊定點整數相關的一些強制類型轉換第一個部分,探討的是在轉換的兩種數據長度相同的情況下呃,無符號數和有符號數之間的一種轉換規則。第二個部分探討的是從長數據強轉成短數據的一個處理方式。
而第三個部分探討的是從短數據轉為長數據的一個轉變方式。

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

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

相關文章

采用多維計算策略(分子動力學模擬+機器學習),顯著提升 α-半乳糖苷酶熱穩定性

字數 978,閱讀大約需 5 分鐘 在工業應用領域,α-半乳糖苷酶在食品加工、動物營養及醫療等方面發揮著重要作用。然而,微生物來源的該酶往往存在熱穩定性不足的問題,限制了其在工業場景中的高效應用。近日,來自江南大學的…

Jetpack Compose預覽調試技巧

Jetpack Compose 預覽(Preview)不顯示是一個常見問題,可能由多種原因導致。以下是系統的調試技巧和解決方案: 1. 檢查基礎配置 Compose 版本兼容性 確保 compose-compiler、compose-ui 等依賴版本一致且與 Kotlin 版本兼容。檢查 build.gradle: android {compileOptions {…

使用 Go 語言實現完整且輕量級高性能的 MQTT Broker

MQTT(Message Queuing Telemetry Transport)是一種輕量級的發布/訂閱消息傳輸協議。但是目前雖然mqtt的客戶端很多,但是服務端著實不多,常見的服務端如mosquitto或emqx。但是golang語言的實現幾乎找不到。golang的輕量級部署和高并…

uv sync --frozen卡住不動

今天受邀幫同事調試uv卡住不動的問題,同樣的代碼已經在別的服務器跑起來了,換了一臺服務器之后,執行uv sync --frozen沒有按預期創建虛擬環境和安裝依賴。 1. 鏡像源是已經配置好的,pip install也能很快安裝包。 2. 查看了uv.lo…

Spring Boot中如何對密碼等敏感信息進行脫敏處理

以下是常見的脫敏方法及實現步驟&#xff0c;涵蓋配置、日志和API響應等多個層面&#xff1a; ?1. 配置文件敏感信息脫敏? (1) 使用加密庫&#xff08;如Jasypt&#xff09; ?步驟?&#xff1a; 添加依賴&#xff1a; <dependency><groupId>com.github.ulise…

springboot中redis的事務的研究

redis的事務類似于隊列操作&#xff0c;執行過程分為三步&#xff1a; 開啟事務入隊操作執行事務 使用到的幾個命令如下&#xff1a; 命令說明multi開啟一個事務exec事務提交discard事務回滾watch監聽key(s)&#xff1a;當監聽一個key(s)時&#xff0c;如果在本次事務提交之…

python打卡day35@浙大疏錦行

知識點回顧&#xff1a; 三種不同的模型可視化方法&#xff1a;推薦torchinfo打印summary權重分布可視化進度條功能&#xff1a;手動和自動寫法&#xff0c;讓打印結果更加美觀推理的寫法&#xff1a;評估模式 作業&#xff1a;調整模型定義時的超參數&#xff0c;對比下效果。…

Python爬蟲實戰:研究Crawley 框架相關技術

1. Crawley 框架相關定義 1.1 網絡爬蟲定義 網絡爬蟲是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。它通過 HTTP 協議與 Web 服務器進行交互,獲取網頁內容并進行解析處理,是數據采集和信息檢索的重要工具。 1.2 Crawley 框架定義 Crawley 是一個基于 Pytho…

tvalid寄存器的理解

if(!out_axis_tvalid_reg || m_axis_tready ) beginend m_axis_tready 是上拍下一級給的ready信號 out_axis_tvalid_reg是上一拍&#xff0c;本級給下級的valid信號 一共有四種組合&#xff0c;然后可以通過這個if語句&#xff0c;在接下來的begin ... end中&#xff0c;用來…

【AI實戰】從“苦AI”到“爽AI”:Magentic-UI 把“人類-多智能體協作”玩明白了!

Hello&#xff0c;親愛的小伙伴們&#xff01;你是否曾經在深夜里&#xff0c;為了自動化點外賣、篩機票、抓網頁數據焦頭爛額&#xff1f;有沒有幻想過哪天能出個“貼心AI管家”&#xff0c;一鍵點菜、搞定事務、自動操作網頁&#xff0c;比你還懂你&#xff1f;更關鍵——還讓…

【東楓科技】usrp rfnoc 開發環境搭建

作者 太原市東楓電子科技有限公司 &#xff0c;代理銷售 USRP&#xff0c;Nvidia&#xff0c;等產品與技術支持&#xff0c;培訓服務。 環境 Ubuntu 20.04 依賴包 sudo apt-get updatesudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils …

Ntfs!ReadIndexBuffer函數分析之根目錄讀取索引緩沖區的一個例子

Ntfs!ReadIndexBuffer函數分析之根目錄讀取索引緩沖區的一個例子 第一部分&#xff1a; 0: kd> p Ntfs!ReadIndexBuffer0xdc: f7173962 e829f60300 call Ntfs!NtfsCheckIndexBuffer (f71b2f90) 0: kd> t Ntfs!NtfsCheckIndexBuffer: f71b2f90 55 p…

LumaDot (亮度可調的屏幕圓點)

應用名稱 LumaDot &#xff08;源自 “Luminance”&#xff08;亮度&#xff09; “Dot”&#xff08;圓點&#xff09;&#xff0c;強調其核心功能&#xff1a;亮度可調的屏幕圓點&#xff09; 應用說明 LumaDot 是一款輕量級 Windows 桌面工具&#xff0c;專為需要屏幕標記…

HarmonyOS 鴻蒙應用開發基礎:EventHub,優雅解決跨組件通信難題

EventHub是鴻蒙開發中用于線程內通信的事件中心模塊&#xff0c;基于發布訂閱模式實現組件間的高效通信。它完美解決了傳統回調方式在多層嵌套場景下的痛點&#xff0c;使得組件間的通信更加靈活和易于管理。 核心特性 事件中心機制&#xff1a;通過事件名進行通信&#xff0c…

前端框架token相關bug,前后端本地聯調

今天我搭建框架的時候&#xff0c;我想請求我自己的本地&#xff01;然后我自己想鏈接我自己的本地后端&#xff0c;我之前用的前端項目&#xff0c;都是鏈別人的后端&#xff0c;基本上很少情況會鏈接自己的后端&#xff01;所以我當時想的是&#xff0c;我前后端接口一樣&…

【數據結構初階】順序表專題

文章目錄 順序表1.數據結構相關概念1、什么是數據結構2、為什么需要數據結構&#xff1f; 2.順序表1、順序表的概念及結構2、順序表分類3、動態順序表的實現1.定義一個動態順序表2.順序表的初始化3.順序表的銷毀4.順序表達的尾插5.順序表的頭插6.空間大小檢查函數7.順序表的尾刪…

從神經生物學到社會心理學:游戲沉迷機制的深度解構

你是否曾在深夜放下手機時驚覺&#xff1a;"明明只想玩10分鐘&#xff0c;怎么天都亮了&#xff1f;"這不是意志力薄弱的表現&#xff0c;而是價值數十億美元的游戲產業用神經科學精心設計的認知陷阱。 當《王者榮耀》的Victory音效讓你心跳加速&#xff0c;當《原神…

15.集合框架的學習

一、簡介 集合框架&#xff08;Collection Framework&#xff09; 是 Java 提供的一套用于存儲、操作和處理數據集合的標準化架構。它主要位于 java.util 包中&#xff0c;提供了一組 接口 和 實現類&#xff0c;用于操作不同類型的數據集合&#xff0c;如列表&#xff08;List…

【方案分享】展廳智能講解:基于BLE藍牙Beacon的自動講解觸發技術實現

【方案分享】展廳智能講解&#xff1a;基于BLE藍牙Beacon的自動講解觸發技術實現 讓觀眾靠近展品即可自動彈出講解頁面&#xff0c;是智能展廳的核心功能之一。本文將從軟硬件技術、BLE Beacon原理、微信小程序實現、優劣對比與拓展方案五個維度&#xff0c;系統講解“靠近展臺…

微前端架構:從單體到模塊化的前端新革命

在信息技術&#xff08;IT&#xff09;的迅猛發展中&#xff0c;前端開發領域正迎來一場顛覆性的變革 —— 微前端架構&#xff08;Micro - Frontends&#xff09;。2025 年&#xff0c;隨著 Web 應用的復雜性激增、團隊協作需求的增長以及用戶對無縫體驗的期待&#xff0c;微前…