c++中int型所能表示的最小的数是-32768,怎么算出来的? c程序中基本整型的取值范围:-32768~32767是怎么算...

c++\u4e2dint99999\u4e3a\u4ec0\u4e48\u4f1a\u7b49\u4e8e31073

\u5728\u67d0\u4e9b\u7f16\u8bd1\u5668\u4e2d\uff0cint\u662f2\u4e2a\u5b57\u8282\uff0c\u6700\u5927\u503c\u662f32767\uff0c
99999\u660e\u663e\u8d8a\u754c\u4e86
\u5e94\u8be5\u662f-31073\u624d\u5bf9\u5427
99999 = 0x1869F
\u540e\u4e24\u4e2a\u5b57\u8282\u662f0x869F\uff0c\u9ad8\u4f4d\u662f1\uff0c\u6240\u4ee5\u662f\u8d1f\u7684
0x869F\u53d6\u53cd\u7801+1\u662f31073\uff0c
\u7ed3\u679c\u662f-31073

\u6574\u578b\u5728\u4f60\u90a3\u4e2a\u7248\u672c\u91cc\u662f\u5360\u7528\u4e24\u4e2a\u5b57\u8282\u6765\u5b58\u50a8\u7684\uff0c\u6bcf\u4e2a\u5b57\u82828\u4f4d\uff0c\u4e5f\u5c31\u662f16\u4f4d\u76842\u8fdb\u5236\uff0c\u5927\u5bb6\u77e5\u9053\u8fd9\u6837\u4e00\u4e2a2\u8fdb\u5236\u6570\u603b\u662f\u5bf9\u5e94\u7740\u4e00\u4e2a\u6b63\u6570\u3002
\u4f46\u662f\u8981\u8868\u793a\u6b63\u6570\u548c\u8d1f\u6570\u8be5\u600e\u4e48\u529e\uff0c\u806a\u660e\u7684\u79d1\u5b66\u5bb6\u5728\u9650\u5236\u76842\u8fdb\u5236\u6570\u4f4d\u6570\u7684\u524d\u63d0\u4e0b\u91c7\u53d6\u4e86\u8865\u7801\uff08\u7b97\u6cd5\u53ca\u8be6\u7ec6\u89c1\u8865\u7801\uff09\u7684\u5f62\u5f0f\u6765\u5b58\u50a8\u8d1f\u6570\u3002
\u7b2c\u4e00\u4f4d\u662f\u7b26\u53f7\u4f4d\uff0c\u4e5f\u5c31\u662f\u7528\u5b83\u6765\u8868\u660e\u8fd9\u4e2a\u6570\u7684\u7b26\u53f7\uff08\u6b63\u6570\uff1a0 \u8d1f\u6570\uff1a1\uff09\u6240\u4ee5int\u578b\u7684\u6700\u5927\u6b63\u6570\u4e3a0111111111111111\uff0815\u4e2a1\uff09\uff0c\u5176\u53d6\u503c\u4e3a2(15)-1\uff0c\u5c31\u662f2\u768415\u6b21\u65b9\u51cf\u4e00\uff0c\u537332768-1=32767\u3002
\u6700\u5c0f\u8d1f\u6570\uff1a1000000000000000\uff0c\u6309\u7167\u8865\u7801\u7684\u8fd0\u7b97\uff0c\u5f97\u8fd9\u4e2a2\u8fdb\u5236\u6570\u5bf9\u5e94\u7684\u5341\u8fdb\u5236\u4e3a-32768\uff0c\u8fd9\u6837\u4e5f\u89e3\u91ca\u4e86\u4e3a\u4ec0\u4e48\u6700\u5927\u6b63\u6570\u4e0e\u6700\u5c0f\u8d1f\u6570\u7684\u7edd\u5bf9\u503c\u5dee1\u3002

对于这个问题我是这样认为的,楼主认为的c++中int型所能表示的最小的数是-32768是错误的,
其实无论是C还是C++在16位机器上就是2个字节
在32位机器上就是4个字节,在64位机器上就是8个字节,
其实在编程时int占多少个字节是由编译器决定的,ANSI标准定义int是占2个字节.
TC是按ANSI标准的,它的int是占2个字节的.
你可以在TC里试.printf("%d",sizeof(int));结果是2;
但是在VC里,一个int是占4个字节的,在VC里面,
printf("%d",sizeof(int));
cout<<sizeof(int);结果都是4.
不同的编译器,规定也不一样.
float,double也是一样的,在不同的编译器里,占的字节是不一样的.
不管你是多少位的机器它都是这么处理的,
至于为什么int型最小的数是-32768,请参考楼上的同学们的回答

16个码位,每个码位两种变化(0,1),一共有2的16次方种(既65536)不同变化.也就是可以为65536个数编码.
如果不考虑符号,那么那么它们可以为0~65535编码.这就是两字节无符号数的范围.

如果考虑符号,可行的方案是负数和非负数各占一半 . 65536/2=32768. 所以负数的范围是-32768~-1,非负数因为0要占一个位置,所以范围是0~32767.

现在考虑编码方案.为32768个数编码只需要15位,所以剩下的一位可以做为符号指示.0表示正数,1表示负数.
这样有符号数的0~32767的编码和无符号数在这个范围的编码相同.
-32768~-1 的编码一种方案是直接用相应正数的编码,然后符号位设置为1.如果采用这种方案,人很好理解,但机器就不好处理了.早期的计算机研究者经过很多不同方案的研究比较,最终决定采用机器很好处理的"补码表示法",即负数的编码 是相应正数的编码取反加1.
比如正数1的2字节编码是
00000000 00000001,按位取反为11111111 11111110,再加1得11111111 11111111,这就得到了负数-1的编码.这是最大的负数,最小的负数:第一位是负号为1,其他位全0,即10000000 00000000=-32768. 要从2进制10000000 00000000得到其10进制可以这样算.符号位1得到负号,2进制数按位取反得到15位全1,对应正数32767,32767+1得到32768,结果-32768

C++中int是4个字节(即4byte),因为1byte=8bit;换句话说就是一个字节用8个2进制位表示,就是int是用32个二进制位表示(32bit),
有因为32位要表示正数和负数,就用负的2的31次方来表示最小的负数,(32位中的最高为是表示符号的,剩下31来表示数)
c++中最小负数是-2^31=-65536,最大正数是2^31-1=65535(0占了一位不能表示到32768)

特别提醒在c才中最小的负数才是-2^16=-32768;c++不是-32768,是
-65536

是。int 2字节,16位,第一位是符号位,是1。
整数在内存中以补码形式存在,它的存在形式应为
10000000,00000000,它的原码应该为
11111111,11111111+1。符号位为1不变,其余各位总和为2的16次方,等于-32768。

4个字节,就是(负号用补码存就是这样的)
FFFF=1111111111111111
第一位是符号位
所以还有15位2进制1
15位1就是32768
所以这是最小的

4个字节,如果是无符号的就是2的32次方那么大(65536),如果是有符号则平均分,刚好-32768---+32767

  • C璇█int鏈灏鐨勫兼槸澶氬皯?
    绛旓細1 C璇█涓紝int鑻ユ槸瑙勫畾澶у皬涓轰袱涓瓧鑺傦紝鍒欏叾鏈灏忓煎氨鏄-32768 2 鍘熷洜 涓や釜瀛楄妭鏄16浣嶏紝瑙勫畾绗竴浣嶄负绗﹀彿浣嶏紝鍒欏叾鑳借〃绀虹殑鏁板艰寖鍥存槸-2^15~2^15-1锛屽嵆-32768~32767銆備絾鏈灏忓间负浠涔堟槸-32768锛屼负浠涔堜笉鏄-32767鍛紵鍘熸潵浜轰滑鍙戠幇鑻ユ槸鍦ㄥ唴瀛樹腑鐩存帴瀛樻斁鏁扮殑鍘熺爜锛屽垯0000 0000 0000 0000鍜1000 0...
  • 鍋囪int绫诲瀷鍙橀噺鍗犵敤2涓瓧鑺傚湪c璇█涓,鏈灏鏁村瀷鏁版槸?
    绛旓細鍦 C 璇█涓紝`int` 绫诲瀷鐨勫彉閲忛氬父鍗犵敤 2 涓瓧鑺傦紙16 浣嶏級锛屽叾涓寘鎷竴涓鍙蜂綅鍜 15 浣嶈〃绀烘暟鍊肩殑浜岃繘鍒朵綅銆傚洜姝わ紝鏈灏忕殑鏁村瀷鏁板彲浠ラ氳繃瀵硅绫诲瀷鐨勫彇鍊艰寖鍥磋繘琛岃绠楀緱鍒般傛牴鎹 C 璇█瑙勮寖锛宍int` 绫诲瀷鐨勫彇鍊艰寖鍥翠负 -32768 鍒 32767锛屽嵆 -2^15 鍒 2^15-1銆傚叾涓紝鏈灏忕殑鏁村瀷鏁版槸 -32768...
  • 涔熻皥c璇█int绫诲瀷鏈灏鍊
    绛旓細c璇█涓璱nt鏄甫绗﹀彿鐨32浣嶆暟锛屾渶楂樹綅涓虹鍙蜂綅锛屽叾浣31浣嶄负鏁板间綅锛屾渶澶鐨刬nt鍊煎緢濂界畻锛岄偅灏辨槸绗﹀彿浣嶄负0锛屽叾浣31浣嶅叏涓1锛岄偅涔堣繖涓煎氨绛変簬2 31 -1锛岃繖涓病鏈夊紓璁 閭d箞int绫诲瀷鐨勬渶灏鍊煎氨姣旇緝缁曚簡锛屽洜涓鸿繖涓兼槸涓涓礋鏁帮紝鑰岃礋鏁板湪璁$畻鏈洪噷鏄敤琛ョ爜鏉琛ㄧず鐨锛屼篃灏辨槸鐢ㄨ礋鏁扮殑缁濆鍊硷紝鎸変綅...
  • 鍦c璇█涓,2涓瓧鑺鐨刬nt,鏈澶х殑鏁存暟鏄痏__,鏈灏鐨勬暣鍨嬫暟鏄痏__?
    绛旓細鍦–璇█涓紝閫氬父浣跨敤鐨2涓瓧鑺傜殑int绫诲瀷涓烘湁绗﹀彿鏁存暟锛屾渶澶у间负32767锛鏈灏忓间负-32768銆傝繖鏄洜涓2涓瓧鑺傚彲浠ヨ〃绀虹殑浜岃繘鍒朵綅鏁颁负16浣嶏紝鍏朵腑1浣嶈〃绀虹鍙凤紝鍓╀笅鐨15浣嶅彲浠ヨ〃绀2^15 = 32768涓暟锛岀敱浜庢湁1浣嶈〃绀虹鍙凤紝鍥犳姝f暟鏈澶т负2^15-1 = 32767锛岃礋鏁版渶灏忎负-2^15 = -32768銆
  • int绫诲瀷琛ㄧず鐨勬渶澶у煎拰鏈灏鍊
    绛旓細鐢1涓瓧鑺傝〃绀虹殑闈炶礋鏁存暟锛屾渶灏忓间负銆0銆锛屾渶澶у间负銆255銆戙備緥濡傦細閲囩敤char绫诲瀷锛岀敤涓涓瓧鑺傝〃绀洪潪璐熸暣鏁帮紝鏈灏忓间负0锛屾渶澶у间笉鑳戒负128銆俢har绫诲瀷琛ㄧず鑼冨洿锛-128~shu127 unsigned char绫诲瀷琛ㄧず鑼冨洿锛0~255銆---浣跨敤杩欑绫诲瀷锛屽氨鍙互浜嗐
  • c++涓璱nt鍨嬫墍鑳借〃绀虹殑鏈灏鐨勬暟鏄-32768,鎬庝箞绠楀嚭鏉ョ殑?
    绛旓細瀵逛簬杩欎釜闂鎴戞槸杩欐牱璁や负鐨,妤间富璁や负鐨刢++涓璱nt鍨嬫墍鑳借〃绀虹殑鏈灏鐨勬暟鏄-32768鏄敊璇殑,鍏跺疄鏃犺鏄C杩樻槸C++鍦16浣嶆満鍣ㄤ笂灏辨槸2涓瓧鑺 鍦32浣嶆満鍣ㄤ笂灏辨槸4涓瓧鑺,鍦64浣嶆満鍣ㄤ笂灏辨槸8涓瓧鑺,鍏跺疄鍦ㄧ紪绋嬫椂int鍗犲灏戜釜瀛楄妭鏄敱缂栬瘧鍣ㄥ喅瀹氱殑锛孉NSI鏍囧噯瀹氫箟int鏄崰2涓瓧鑺傦紟TC鏄寜ANSI鏍囧噯鐨勶紝瀹冪殑int鏄...
  • 32767鍜-32768鍦C璇█涓湁浠涔堝惈涔?
    绛旓細int鍨嬪崰2涓瓧鑺傦紝鍏16浣嶃俰nt鍨嬭兘琛ㄧず鐨勬渶澶ф鏁颁负锛堟渶楂樹綅涓虹鍙蜂綅锛屾鏁扮殑绗﹀彿浣嶄负0锛夛細0111 1111 1111 1111 涔熷嵆2^15-1=32767 int鍨嬭兘琛ㄧず鐨勬渶灏璐熸暟涓猴紙鏈楂樹綅涓虹鍙蜂綅锛岃礋鏁扮殑绗﹀彿浣嶄负1锛夛細1000 0000 0000 0000锛堣ˉ鐮侊級锛岃屽湪璁$畻鏈轰腑璐熸暟鏄埄鐢ㄨˉ鐮佽繘琛屽瓨鍌ㄧ殑锛屾墍浠ュ皢1000 0000 0000 00...
  • Int16鐨勬渶澶у鏈灏鍊艰寖鍥?
    绛旓細Int16鐨勬渶澶у鏈灏鍊艰寖鍥村湪-32768 鍒 +32767涔嬮棿銆c璇█涓锛int鏈澶у兼槸2147483647銆俢璇█涓紝int銆乴ong int 銆乽nsigend long int閮芥槸4涓瓧鑺傦紝鍏跺彲浠ョ敤sizeof()鍑芥暟寰楀嚭銆傚崰鐢4涓瓧鑺傜殑鏁存暟鍏舵渶澶ц兘琛ㄧず鏁扮殑涓暟鏄2^32锛4涓瓧鑺傚叡32浣嶏級銆俰nt銆乴ong int閮芥槸甯︾鍙锋暣鏁绫诲瀷锛屽洜姝ゅ畠浠鑳借〃绀虹殑...
  • C璇█涓璱nt 鏈灏鍊间负浠涔堟槸-32768
    绛旓細浣犵悊瑙g殑寰堝锛屽綋鐒舵槸16涓1鏈灏锛堝師鐮侊級銆備絾鏄綘蹇界暐浜嗕竴涓棶棰橈細涓轰粈涔堟垜浠鐢ㄨˉ鐮侊紝涓嶆槸鍘熺爜銆傚洜涓哄師鐮佷腑+0鍜-0鐨勭爜涓嶄竴鏍凤紒鎹㈡垚琛ョ爜涔嬪悗锛-0鐨勮ˉ鐮佸氨鍜+0鐨勮ˉ鐮佷笉涓鏍蜂簡锛屾垜浠妸-0鐨勮ˉ鐮佽瀹氫负锛16涓1鍘熺爜锛-1銆傛槑鐧藉悧锛熷師鐮佹崲鎴愯ˉ鐮佷箣鍚庯紝灏卞浜嗕竴涓爜锛-0锛夛紝鎴戜滑鎶婂畠浜轰负璁惧畾涓烘渶...
  • C璇█涓渶澶х殑鏁村瀷鏁板拰鏈灏忕殑鏁村瀷鏁版槸浠涔?
    绛旓細C璇█涓渶澶х殑鏃犵鍙锋暣鍨嬪父鏁颁负65535锛鏈灏忕殑鏃犵鍙锋暣鍨嬪父鏁颁负0銆傛渶澶х殑鏈夌鍙锋暣鍨嬪父鏁颁负32767锛屾渶灏忕殑鏈夌鍙锋暣鍨嬪父鏁颁负-32768銆傚湪C缂栬瘧绯荤粺涓紝鍩烘湰鏁村瀷鐨勯暱搴︿篃涓16浣嶏紝鍥犳琛ㄧず鐨鏁扮殑鑼冨洿涔熸槸鏈夐檺瀹氱殑銆傚崄杩涘埗鏃犵鍙锋暣甯告暟鐨勮寖鍥翠负0锝65535锛屾湁绗﹀彿鏁颁负-32768锝+32767銆傚鏋滀娇鐢ㄧ殑鏁拌秴杩囦簡涓婅堪鑼冨洿...
  • 扩展阅读:c++和python先学哪个 ... c++中int main 报错 ... c++中<< ... dev c++中int占几个字节 ... c++中long int 几个字节 ... c++ ... c++中new int的用法 ... c++ int函数 ... c++中int &什么意思 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网