C# 轉換(顯式轉換和強制轉換)

顯式轉換和強制轉換

如果要把短類型轉換為長類型,讓長類型保存短類型的所有位很簡單。然而,在其他情況下,
目標類型也許無法在不損失數據的情況下容納源值。
例如,假設我們希望把ushort值轉化為byte。

  • ushort可以保存任何0~65535的值。
  • byte只能保存0一255的值。
  • 只要希望轉換的ushort值小于256,就不會損失數據。然而,如果大于256,最高位的數
    據將會丟失。

例如,圖17-5演示了嘗試把值為1365的ushort類型轉換為byte類型會導致數據丟失。不
是源值的所有最高位都適合目標類型,這會導致溢出或數據丟失。源值是1365,而目標的最大
值只能是255。最終字節中的結果值為85,而不是1365。

嘗試把ushort轉換為byte

很明顯,在所有可能的無符號16位ushort值中,只有相當小一部分(0.4%)能在不損失
數據的情況下安全轉換為無符號8位byte類型。其他值會導致數據溢出(overflow),產生其
他值。

強制轉換
對于預定義的類型,C#會自動將一個數據類型轉換為另一個數據類型,但只是針對那些從源
類型轉換為目標類型時不會發生數據丟失的情況。也就是說,如果源類型的任意值在被轉換成目
標類型時會丟失值,那么C#是不會提供這兩種類型的自動轉換的。如果希望對這樣的類型進行
轉換,就必須使用顯式轉換。這叫作強制轉換表達式
如下代碼給出了一個強制轉換表達式的示例。它把varl的值轉換為sbyte類型。強制轉換
表達式的構成如下所示。

  • 一對圓括號,里面是目標類型。
  • 圓括號后是源表達式。

image
如果我們使用強制轉換表達式,就意味著要承擔執行操作可能引起的丟失數據的后果。這就
好比我們說:“不管是否會發生數據丟失,我知道在做什么,進行轉換吧。"(這時你一定要真正
清楚自己在做什么。)

例如,圖17-6演示了強制轉換表達式將兩個ushort類型的值轉換為byte類型。對于第一種
情況,沒有數據丟失。對于第二種情況,最高位丟失了,得到的值是85,很明顯不等于源值1365。

強制轉換ushort為byte

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

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

相關文章

淺談自動化設計最常用的三款軟件catia,eplan,autocad

筆者從上半年開始接觸這三款軟件,掌握了基礎用法,但是過了一段時間不用,發現再次用,遇到的問題短時間解決不了,忘記的有點多,這里記錄一下,防止下次忘記Elpan:問題1QF01是柜安裝板上的一個部件&…

網絡編程7.17

練習&#xff1a;服務器&#xff1a;#include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include &…

c++ 模板元編程

聽說模板元編程能在編譯時計算出常量&#xff0c;簡單測試下看看&#xff1a;template<int N> struct Summation {static constexpr int value N Summation<N - 1>::value; // 計算 1 2 ... N 的值 };template<> struct Summation<1> { // 遞歸終…

【深度學習】神經網絡過擬合與欠擬合-part5

八、過擬合與欠擬合訓練深層神經網絡時&#xff0c;由于模型參數較多&#xff0c;數據不足的時候容易過擬合&#xff0c;正則化技術就是防止過擬合&#xff0c;提升模型的泛化能力和魯棒性 &#xff08;對新數據表現良好 對異常數據表現良好&#xff09;1、概念1.1過擬合在訓練…

JavaScript的“硬件窺探術”:瀏覽器如何讀取你的設備信息?

JavaScript的“硬件窺探術”&#xff1a;瀏覽器如何讀取你的設備信息&#xff1f; 在Web開發的世界里&#xff0c;JavaScript一直扮演著“幕后魔術師”的角色。從簡單的頁面跳轉到復雜的實時數據處理&#xff0c;它似乎總能用最輕巧的方式解決最棘手的問題。但你是否想過&#…

論安全架構設計(層次)

安全架構設計&#xff08;層次&#xff09; 摘要 2021年4月&#xff0c;我有幸參與了某保險公司的“優車險”項目的建設開發工作&#xff0c;該系統以車險報價、車險投保和報案理賠為核心功能&#xff0c;同時實現了年檢代辦、道路救援、一鍵挪車等增值服務功能。在本項目中&a…

滾珠導軌常見的故障有哪些?

在自動化生產設備、精密機床等領域&#xff0c;滾珠導軌就像是設備平穩運行的 “軌道”&#xff0c;為機械部件的直線運動提供穩準導向。但導軌使用時間長了&#xff0c;難免會出現這樣那樣的故障。滾珠脫落&#xff1a;可能由安裝不當、導軌損壞、超負荷運行、維護不當或惡劣環…

機器視覺的包裝盒絲印應用

在包裝盒絲網印刷領域&#xff0c;隨著消費市場對產品外觀精細化要求的持續提升&#xff0c;傳統印刷工藝面臨多重挑戰&#xff1a;多色套印偏差、曲面基材定位困難、異形結構印刷失真等問題。雙翌光電科技研發的WiseAlign視覺系統&#xff0c;通過高精度視覺對位技術與智能化操…

Redis學習-03重要文件及作用、Redis 命令行客戶端

Redis 重要文件及作用 啟動/停止命令或腳本 /usr/bin/redis-check-aof -> /usr/bin/redis-server /usr/bin/redis-check-rdb -> /usr/bin/redis-server /usr/bin/redis-cli /usr/bin/redis-sentinel -> /usr/bin/redis-server /usr/bin/redis-server /usr/libexec/red…

SVN客戶端(TortoiseSVN)和SVN-VS2022插件(visualsvn)官網下載

SVN服務端官網下載地址&#xff1a;https://sourceforge.net/projects/win32svn/ SVN客戶端工具(TortoiseSVN):https://plan.io/tortoise-svn/ SVN-VS2022插件(visualsvn)官網下載地址&#xff1a;https://www.visualsvn.com/downloads/

990. 等式方程的可滿足性

題目&#xff1a;第一次思考&#xff1a; 經典并查集 實現&#xff1a;class UnionSet{public:vector<int> parent;public:UnionSet(int n) {parent.resize(n);}void init(int n) {for (int i 0; i < n; i) {parent[i] i;}}int find(int x) {if (parent[x] ! x) {pa…

HTML--教程

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鳥教程(runoob.com)</title> </head> <body><h1>我的第一個標題</h1><p>我的第一個段落。</p> </body> </html&g…

Leetcode刷題營第二十七題:二叉樹的最大深度

104. 二叉樹的最大深度 給定一個二叉樹 root &#xff0c;返回其最大深度。 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;3示例 2&#xff1a; 輸入&#xff…

微信小程序翻書效果

微信小程序翻書效果 wxml <viewwx:for"{{imgList}}" hidden"{{pagenum > imgList.length - index - 1}}"wx:key"index"class"list-pape" style"{{index imgList.length - pagenum - 1 ? clipPath1 : }}"bindtouchst…

個人IP的塑造方向有哪些?

在內容創業和自媒體發展的浪潮下&#xff0c;個人IP的價值越來越受到重視。個人IP不僅是個人品牌的延伸&#xff0c;更是吸引流量來實現商業變現的重要工具。想要塑造個人IP&#xff0c;需要我們有明確的內容方向和策略&#xff0c;下面就讓我們來簡單了解下。一、展現自我形象…

Spring之【BeanDefinition】

目錄 BeanDefinition接口 代碼片段 作用 BeanDefinitionRegistry接口 代碼片段 作用 RootBeanDefinition實現類 GenericBeanDefinition實現類 BeanDefinition接口 代碼片段 public interface BeanDefinition {// ...void setScope(Nullable String scope);NullableSt…

GD32VW553-IOT LED呼吸燈項目

GD32VW553-IOT LED呼吸燈項目項目簡介這是一個基于GD32VW553-IOT開發板的LED呼吸燈演示項目。通過PWM技術控制LED亮度&#xff0c;實現多種呼吸燈效果&#xff0c;展示RISC-V MCU的PWM功能和實時控制能力。功能特性1. 多種呼吸燈效果正弦波呼吸&#xff1a;自然平滑的呼吸效果線…

Linux(Ubuntu)硬盤使用情況解析(已房子舉例)

文章目錄前言輸出字段詳解1.核心字段說明2.生活化的方式解釋&#xff08;已房間為例&#xff09;3.重點理解①主臥室 (/)??②??臨時房 (tmpfs)??總結前言 “df -h” 是在 Linux ??檢查磁盤空間狀態的最基本、最常用的命令之一??。當發現系統變慢、程序報錯說“磁盤空…

vue中的this.$set

在 Vue 2 中&#xff0c;this.$set 是一個用于響應式地添加新屬性到已有對象的全局 API。它的主要作用是解決 Vue 無法檢測到對象屬性添加或刪除的限制&#xff08;由于 Vue 2 的響應式系統基于 Object.defineProperty 實現&#xff09;。1. 為什么需要 this.$set&#xff1f; …