C\C++不经意间留下的知识空白------有符号数和无符号数
C和C++
C和C++應該是大多數工科生最先接觸的兩門語言,個人感覺這兩門還是挺難的。今天在看面試題時,看到有符號數和無符號數時竟然懵了,這基礎是有多不扎實啊!
有符號數和無符號數
對于浮點數來說都是有符號數,不存在無符號數。所以就拿8位一個字節的char類型來說一下這個有符號數和無符號數。
首先,對于無符號數我們知道:8位的話最大表示255
例:0000 0001 = 1
1111 1111 = 255
對于有符號數,我想很多就知道首位表示符號位,后面怎么表示的都忘了,我就是把這個忘了,才弄了挺久才搞懂。
首位是1表示負數,首位是0表示正數
例:那么-7,我想會有一部分是這樣表示的1000 0111,很遺憾我開始就是這樣,但它是不對的。
除去符號位,后面按位取反再加一,這才是負數表示方法
還拿-7來說,首先第一步:1000 0111 第二步按位取反:1111 1000,第三步加一:1111 1001
所以 -7 = 1111 1001
-8 > 1000 1000 > 1111 0111 > 1111 1000
同時還有一個點是無符號數和有符號數相加會自動轉換成無符號數。
我們來操作一下-7+7 = 1111 1001 + 0000 0111 = 1 0000 0000,只有八位,溢出,得到結果為0.符合我們的認知 -7+7 = 0
再來操作一下-8 + 7 = 1111 1000 + 0000 0111 = 1111 1111 = 255 這和我們的常識是不一樣的。編程時需要注意。
在編程的過程中盡量不要無符號數和有符號直接運算。因為中間會發生默認的類型轉換。
總結
以上是生活随笔為你收集整理的C\C++不经意间留下的知识空白------有符号数和无符号数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: list::splice函数的用法与参数
- 下一篇: 直方图中最大的矩形(遍历与单调栈)