chapter 15 运算符详解
生活随笔
收集整理的這篇文章主要介紹了
chapter 15 运算符详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
15.1位運算符
1.位運算符都是要做Usual Arithmetic Conversion(其中有一步是Integer Promotion),所以在c語言中并不存在8為整數的位運算,操作數在進行運算前都至少被提升為int型了
ex1:
unsigned char c = 0xfc; unsigned int i = ~c;因為在~c前已經先將c轉換為16位,所以為0x00fc.取反,如果理解為8位,則為0xfc取反,此時錯誤的結果為3.
2.在一定的取值范圍內,將一個整數左移1位相當于乘以2.此時一定的范圍主要是指,左移不能改變最高位(符號位)
3右移的規則
- 如果是正數,最高位移入0
- 如果為負數,最高位移入0or1(根據不同平臺確定,Implementation-defined,gcc為1)
tip:一般建議僅對無符號數進行操作,以減少出錯的可能。
?
4 異或的性質:不管0or1,與0異或保持原值不變,與1異或則取反
利用此性質可以進行就校驗:a1^a2^a3…..^an 如果結果為1,則其中的1的個數為奇數個,否則為偶數個
5RAID(redundant array of independent disks)獨立磁盤冗余陣列就是利用為操作的原理進行分割
不用變量交換兩數據
1
startAngle = startAngle+stopAngle; stopAngle = startAngle-stopAngle; startAngle = startAngle-stopAngle;缺點:無法用于小數
2
x ^= y; y ^= x; x ^= y; 缺點:無法用于小數 (不要用這種方法,最好的還是利用temp進行交換) 5 sizeof 表達式 其中表達式并不求值。sizeof(i++),其中i不變 6 side effect &sequence point side effect:改變計算機存儲的值或者輸入輸出 sequence point:當執行到某一點時,之前的side effect必須作用完畢 在寫代碼時要熬注意同一個變量在兩個sequence point之間最多只允許改變一次 ex2 int a =0; a = a++; ex3 a[i++]=i; 雖然只改變一次也是不確定的 C99 Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression.Furthermore,the prior value shall be read only to determine the value to be stored.轉載于:https://www.cnblogs.com/qtalker/archive/2013/04/03/2998701.html
總結
以上是生活随笔為你收集整理的chapter 15 运算符详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二进制指数类型退避算法
- 下一篇: 感情某时是真实