c语言char类型溢出,C语言中数据溢出的问题---以char类型为例
一、首先char類型的取值范圍是-128~127,對于127的二進(jìn)制表示是:01111111,-127的二進(jìn)制表示是:11111111,那么問題來了:-128是怎么來的?1、當(dāng)charch=128或c.
一、首先char類型的取值范圍是-128~127,對于127的二進(jìn)制表示是:0111?1111,
-127的二進(jìn)制表示是:1111?1111,那么問題來了:-128是怎么來的?
1、當(dāng)?char?ch?=?128?或?ch?=?-0時(shí),則二進(jìn)制為?1000?0000
計(jì)算機(jī)內(nèi)存中都是按負(fù)數(shù)來處理的
當(dāng)求補(bǔ)碼的時(shí)候會溢出,則需要先進(jìn)行位擴(kuò)展,變?yōu)?1?1000?0000
然后,反碼:1?0111?1111
補(bǔ)碼:1?1000?0000??(?-128?)
由于char?為8個(gè)字節(jié),截取后八位,變?yōu)?1000?0000?,則128?或?-0在內(nèi)存中為?-128
2、當(dāng)?char?ch?=?-129時(shí),?則二進(jìn)制為?1?1000?0001
反碼:1?0111?1110
補(bǔ)碼:1?0111?1111
截取后八位,變?yōu)?0111?1111?(?127);
例如:char?ch?=?2000;最終計(jì)算機(jī)所讀到的數(shù)是多少呢?
2000的二進(jìn)制表示是:111 1101 0000,,截取八位為:1101 0000,最高位是符號位,計(jì)算機(jī)認(rèn)為它是一個(gè)負(fù)數(shù),而負(fù)數(shù)是以補(bǔ)碼的方式存儲的,所以,通過取反、加1后變?yōu)?#xff1a;1011 0000,這樣ch = -48。
總結(jié)
以上是生活随笔為你收集整理的c语言char类型溢出,C语言中数据溢出的问题---以char类型为例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话西游手游安卓和苹果互通吗
- 下一篇: c语言聊天程序socket,今天打的代码