就像知道int的取值范围
在内存中分配2个字节 也就16位的二进制
-32768 怎么来的
32767又是怎么来的
0111 1111 1111 1111
我知道最高位代表符号位 上面的十进制为 32767
最小取值应该是最小的负数
1111 1111 1111 1111
搞晕了 可能给我说明一下!
Cè¯è¨intçåå¼èå´å¨32/64ä½ç³»ç»ä¸é½æ¯32ä½ï¼èå´ä¸º-2147483648~+2147483647ï¼æ 符å·æ åµä¸è¡¨ç¤ºä¸º0~4294967295ã
C/C++ç¼ç¨è¯è¨ä¸ï¼int表示æ´ååéï¼æ¯ä¸ç§æ°æ®ç±»åï¼ç¨äºå®ä¹ä¸ä¸ªæ´ååéï¼å¨ä¸åç¼è¯ç¯å¢æä¸åç大å°ï¼ä¸åç¼è¯è¿è¡ç¯å¢å¤§å°ä¸åã
Cçæ°æ®ç±»åå æ¬ï¼æ´åãå符åãå®åææµ®ç¹åï¼å精度åå精度ï¼ãæ举类åãæ°ç»ç±»åãç»æä½ç±»åãå ±ç¨ä½ç±»åãæéç±»åå空类åã
åºæ¬æ°æ®ç±»åï¼
voidï¼å£°æå½æ°æ è¿åå¼ææ åæ°ï¼å£°ææ ç±»åæéï¼æ¾ç¤ºä¸¢å¼è¿ç®ç»æãï¼C89æ åæ°å¢ï¼
charï¼å符åç±»åæ°æ®ï¼å±äºæ´åæ°æ®çä¸ç§ãï¼K&Ræ¶æå¼å ¥ï¼
intï¼æ´åæ°æ®ï¼è¡¨ç¤ºèå´é常为ç¼è¯å¨æå®çå ååèé¿ãï¼K&Ræ¶æå¼å ¥ï¼
floatï¼å精度浮ç¹åæ°æ®ï¼å±äºæµ®ç¹æ°æ®çä¸ç§ãï¼K&Ræ¶æå¼å ¥ï¼
doubleï¼å精度浮ç¹åæ°æ®ï¼å±äºæµ®ç¹æ°æ®çä¸ç§ãï¼K&Ræ¶æå¼å ¥ï¼
_Bool:å¸å°åï¼C99æ åæ°å¢ï¼
_Complex:å¤æ°çåºæ¬ç±»åï¼C99æ åæ°å¢ï¼
_Imaginary:èæ°ï¼ä¸å¤æ°åºæ¬ç±»åç¸ä¼¼ï¼æ²¡æå®é¨ç纯èæ°ï¼C99æ åæ°å¢ï¼
_Generic:æä¾éè½½çæ¥å£å ¥å£ï¼C11æ åæ°å¢ï¼
æ©å±èµæï¼
1989å¹´ï¼ANSIåå¸äºç¬¬ä¸ä¸ªå®æ´çCè¯è¨æ åââANSI X3.159â1989ï¼ç®ç§°âC89âï¼ä¸è¿äººä»¬ä¹ä¹ æ¯ç§°å ¶ä¸ºâANSI Câã
C89å¨1990年被å½é æ åç»ç»ISO(International Standard Organization)ä¸åä¸æ¹å°é纳ï¼ISOå®æ¹ç»äºçå称为ï¼ISO/IEC 9899ï¼æ以ISO/IEC9899: 1990ä¹é常被ç®ç§°ä¸ºâC90âã
1999å¹´ï¼å¨åäºä¸äºå¿ è¦çä¿®æ£åå®ååï¼ISOåå¸äºæ°çCè¯è¨æ åï¼å½å为ISO/IEC 9899ï¼1999ï¼ç®ç§°âC99âã
å¨2011å¹´12æ8æ¥ï¼ISOåæ£å¼åå¸äºæ°çæ åï¼ç§°ä¸ºISO/IEC9899: 2011ï¼ç®ç§°ä¸ºâC11âã
åèèµæï¼
16位的int取值范围分为无符号整型(unsigned int)和有符号整型(signed int)。
无符号整型是0000 0000 0000 0000 ~ 1111 1111 1111 1111,对应的十进制数为0到65535(即2^16-1)。
要理解有符号整型首先要了解两个规定:
符号位:对于有符号整型,存储单元中最高位代表符号位:0为正,1为负。
有符号整型的负数表示方法:补码(原码先取反再加1得到补码)。
-------------------------------------------------------------------------------
举例:表示16位的-1。
1的原码:0000 0000 0000 0001;
取反(01互换):1111 1111 1111 1110;
加1:1111 1111 1111 1111。
得到-1的补码为1111 1111 1111 1111。
所以16位二进制有符号整型的-1就表示为1111 1111 1111 1111。
-------------------------------------------------------------------------------
所以16位二进制数有符号整型的表示范围为:
正数,最高位为0,取值范围如下:
0000 0000 0000 0001 到 0111 1111 1111 1111
对应的十进制数为1到32767(2^15-1)。
0,全部位为0:
0000 0000 0000 0000。
负数,最高位为1,取值范围如下(以补码形式表示):
1111 1111 1111 1111 到 1000 0000 0000 0000
对应的十进制数为-32768到-1,即-2^15到-1。
综上,16位二进制数有符号整型的取值范围是-32768到32767。
加深理解:题主问题中问-32768(-2^15)怎么来的,1000 0000 0000 0000在无符号整型中表示2^15怎么在有符号整型中就表示-2^15了呢?这里可以通过补码减1取反倒推出原码。
补码:1000 0000 0000 0000
减1:0111 1111 1111 1111
取反得到原码:1000 0000 0000 0000(2^15)
原码补码相同,只是个巧合。