整型提升(integer promotion)
什麼是integer promotion:
Integer Promotions
Integer types smaller than int are promoted when an operation is performed on them. If all values of the original type can be represented as an int, the value of the smaller type is converted to an int; otherwise, it is converted to an unsigned int.
Integer promotions are applied as part of the usual arithmetic conversions
char c1, c2; c1 = c1 + c2;
Integer promotions require the promotion value of each variable (c1
Integer promotions are performed to avoid arithmetic errors resulting from the overflow of intermediate values. On line 5 of Figure 5-7, the value of c1 is added to the value of c2. The sum of these values is then added to the value of c3
Figure 5-7. Preventing arithmetic errors with implicit conversions
1. char cresult, c1, c2, c3; 2. c1 = 100; 3. c2 = 90; 4. c3 = -120; 5. cresult = c1 + c2 + c3; |
更多例子:
1. 這個例子來自: http://blog.csdn.net/dyllove98/article/details/9004872
開門見山,先來看一段簡單的程式碼:
1 #include <stdio.h> 2 3 int array[] = {1, 2, 3, 4, 5, 6, 7}; 4 #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) 5 6 int main() 7 { 8 int i = -1; 9 int x; 10 11 if(i <= TOTAL_ELEMENTS - 2) { //整型提升 12 x = array[i + 1]; 13 printf("x = %d.\n", x); 14 } 15 16 printf("now i = %d.\n", TOTAL_ELEMENTS); 17 18 return 0; 19 }
執行結果:
[email protected]:~/C_Language$ ./a.out
now i = 7.
是不是很奇怪?為什麼沒有打出line13的x = ?。
是這樣的。這個小例子有三點值得注意:
1.sizeof()是運算子,返回型別是無符號的,即非負數。
2.if語句在singned int和unsigned int之間進行判斷語句,根據C語言的整型提升規則,如果原始型別的所有值都可用int型別表示,則其值將被轉換為int型別;否則將被轉換為unsigned int型別。因此此時的i將會被升級成無符號型別。
3.i = -1被升級為無符號型,值究竟是多少?這要用到整型轉換規則:K&R上這樣解釋,將任何整數轉換為某種指定的無符號數型別數的方法是:以該無符號數型別能夠表示的最大值加1為摸,找出與此整數同餘的最小的非負值。聽著很拗口,其實說白了,只要知道原整數的二進位制表達方法,再用要即將轉換的型別去解析,就得到升級後的值了。 比如-1,負數在計算機裡用補碼錶示,0xffffffff,那升級成無符號型之後,值就是0xffffffff,顯然比TOTAL_ELEMENTS(7)大。
相關推薦
整型提升(integer promotion)
什麼是integer promotion: Integer Promotions Integer types smaller than int are promoted when an operation is performed on them. If all v
C++之羅馬數字轉換為整型數字(12)---《那些奇怪的演算法》
參考《one-day-one-leetcode》 在上篇部落格中我們討論了將1~3999以內的數字轉化為羅馬數字,著重討論了非7個標準的羅馬數字的一些表達,例如4,6,3等等的表達,這篇部落格我們著討
[轉載]Linux後門整理合集(脈搏推薦)
整理 體系 子進程 目標 司機 nbsp 客戶 瀏覽器 -perm 我在思考要不要聯系下....都禁止轉載了.... 簡介 利用 Unix/Linux 自帶的 Bash 和 Crond 實現遠控功能,保持反彈上線到公網機器。 利用方法 先創建 /etc/xxxx
基礎數據類型:(元祖)
數據 spa als 適用於 字符 ron false 只讀 print 元組被稱為只讀列表,即數據可以被查詢,但不能被修改,所以,字符串的切片操作同樣適用於元組。 # t = (1,2,3,‘adsf‘,True,[12,3,‘苑昊‘,‘taibai‘],(‘fdsa‘
IDEA學習系列之IDEA裏項目的任意目錄進行類型標註(五種)(自定義)(這個知識點非常非常重要,必須會) (圖文詳解)
找到 關註 軟件 多說 微信公眾 提示 log 反饋 問題 不多說,直接上幹貨! 前言 對項目的任意目錄進行這五種目錄類型標註,這個知識點非常非常重要,必須會。 1、File ->
Kaggle Master解釋梯度提升(Gradient Boosting)(譯)
提升 php 得到 介紹 iter 其中 agg 分類 amp 如果說線性回歸算法像豐田凱美瑞的話,那麽梯度提升(GB)方法就像是UH-60黑鷹直升機。XGBoost算法作為GB的一個實現是Kaggle機器學習比賽的常勝將軍。不幸的是,很多從業者都只把這個算法當作黑盒使用(
Java 013 StringBuffer類、Arrays類(常見排序)、包裝類(Integer類)
知識點梳理 心得體會 小知識點 1.執行緒安全與不安全 概念:程式碼所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。執行緒安全的程式,多程序需要訪
杭電1047(Integer Inquiry)
test1 4 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0 123456789012345678901234567890 1234
迴圈列印金字塔型字母(C語言)
題目要求:用巢狀迴圈打印出如下金字塔型字母: A ABA ABCBA ABCDCBA ABCDEDCBA (實際格式是金字塔。。) 當時剛學巢狀迴圈時第一次還不是很會做這個金字塔型(汗),實際上看出規律就很好做了,現放程式碼如下: #include<stdio.h> #def
設計模式教程(Design Patterns Tutorial)筆記之一 建立型模式(Creational Patterns)
目錄 · 概述 · Factory · What is the Factory Design Pattern? ·
C++ 泛型程式設計(單詞數)
題目描述 lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裡不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。 輸入 有多組資料,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,每
C++ 泛型程式設計(國名排序)
題目描述 問題描述:小李在準備明天的廣交會,明天有來自世界各國的客房跟他們談生意,小李要儘快的整理出名單給經理,你能幫他把客戶來自的國家按英文字典次序排好嗎? 例如小李手上有來自加拿大,美國,中國的名單,排好的名單應是美國,加拿大,中國 。 輸入 第1行為一個n(n&
python解釋型語言和編譯型語言(¥2)
解釋型語言和編譯型語言: 1.大家有計算機基礎的都知道,總聽老師說計算機很笨的,就只認識0和1, 所以就需要對我們寫出的程式碼程式進行處理成01程式碼,才能讓計算機認識,進行我們想要的處理,得出我們想得到的結果,或者說是目的! ^其實和我們做事的目的是一樣的,都是想用他為我們做事情,你的做的
RDIFramework.NET V2.7 Web版本升手風琴+樹型目錄(2級+)方法
RDIFramework.NET V2.7 Web版本升手風琴+樹型目錄(2級+)方法 手風琴風格在Web應用非常的普遍,越來越多的Web應用都是採用這種方式來體現各個功能模組,傳統的手風琴風格只支援兩級模組,當我們的功能模組多於兩級時,我們一般採用樹來構造功能選單(我們的框架也提供了這種方式),但
算術轉化和整型提升的奧祕
首先請大家先思考一下3個問題,問題相互之間是有關聯的。 1,整型字面值是屬於整型家族9種中的哪一種呢? 2,什麼是算術轉換?如何轉換的? 3,什麼是整型提升?如何提升的?為什麼會有整形提升? 下面解答上述問題。 1,整型字面值是屬於整型家族9種中的哪一種呢? 答案取決於
Leetcode 343. 整數拆分(Integer Break)
給定一個正整數 n,將其拆分為至少兩個正整數的和,並使這些整數的乘積最大化。 返回你可以獲得的最大乘積。例如,給定 n = 2,返回1(2 = 1 + 1);給定 n = 10,返回36(10 = 3 + 3 + 4)。注意:你可以假設 n 不小於2且不大於58。做題之前是選
Mina中關於多個同類型Filter(如ProtocolCodecFilter)例項共存問題的解決
最近在研讀Mina框架的原始碼,剛好手頭上有專案就直接用上了。直接進入正題…… 對Mina有點了解的人都知道,Mina中有一條FilterChain,我們可以向其中加入Filter實現鏈式處理。從原始碼看來,多數Filter(如ProtocolCodecFi
2016屆藍橋杯牌型種類(dfs演算法)
牌型種數 小明被劫持到X賭城,被迫與其他3人玩牌。 一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。 這時,小明腦
檢查型異常(Checked Exception)與非檢查型異常(Unchecked Exception)
這兩個概念看了忘,碰著了又看,老是傻傻的分不清楚,今天把心得結合從網上搜的資料簡單整理一下,希望幫自己明確區分開這兩個概念,並牢牢的記住 1.檢查型異常(Checked Exception) 個人理解:所謂檢查(Checked)是指編譯器要檢查這類異常,檢查的目的一方面是因為該類異常的發生難以避免
c語言三字母詞(trigraph) && 整型提升
三字母詞(trigraph) && 整型提升 最近看了c的語言標準,因為很喜歡,但是無奈自己英文是個菜鳥.但是所幸看見了一個致力於c11的網站,上面講到了三字母詞,還要整型提升 三字母詞 編譯階段將特定的幾個三字母詞替換為 一個詞這裡是表格