int為什麼不是2的32次方

2021-08-11 05:03:18 字數 995 閱讀 6932

關於int(4位元組)的取值範圍由來(-2^31~2^31-1)?

1.【32位】乙個位元組佔8位,所以4位元組總共是佔32位,然後去掉第一位,也即符號位(1:負,0:正),也就剩下31位!

2.【最大值:2^31-1】為什麼不是2^31?

(1)假設只有三位,其中首位為符號位的話,最大值的情況不就是011嗎?也即表示3.

3 = 2^(3-1)-1.

(2)32位的時候同理,01111111 11111111 11111111 11111111 //而這個數表示的值就是2^31-1.

2^31-1 = 2^(32-1)-1.

3.【最小值:-2^31】為什麼不是-(2^31-1)?

(1)因為資料是由二進位制補碼儲存的:

1)當原碼為正數的時候,正數的原碼反碼補碼都相同,即00011的反碼也為00011,補碼也為00011.

2)當原碼為負數的時候,反碼即按位取反,比如10011為原碼,10011可表示-3,那麼符號位不變,其餘位按位取反即反碼11100.那麼10011的補碼便是11101.

(2)所以可知int所取的最小值原碼為:11111111 11111111 11111111 11111111.

它的反碼為:10000000 00000000 00000000 00000000. (在原碼中表示-0.)

它的補碼為:10000000 00000000 00000000 00000001. (在原碼中表示-1.)

依次可以類推-2,-3,-4......-2^31!

【推到-2^31】

其原碼為10000000 00000000 00000000 00000001 

其反碼為11111111 11111111 11111111 11111110

其補碼為11111111 11111111 11111111 11111111

從上可知最小值只能表示到-2^31,而無法表示到更小的一位:-2^31-1!

4.【綜上所訴,int(4位元組)範圍是:-2^31~2^31-1】!

用MSSQL計算2的10000次方

在論壇看到 牛人們的 思路 特此收藏啊 以備學習 本機測試 1秒 用decimal 38,0 0秒 set nocount on goif object id based is not null drop table based if object id tb is not null drop ta...

用MSSQL計算2的10000次方

在論壇看到 牛人們的 思路 特此收藏啊 以備學習 本機測試 1秒 用decimal 38,0 0秒 set nocount on goif object id based is not null drop table based if object id tb is not null drop ta...

用MSSQL計算2的10000次方

在論壇看到 牛人們的 思路 特此收藏啊 以備學習 本機測試 1秒 用decimal 38,0 0秒 set nocount on goif object id based is not null drop table based if object id tb is not null drop ta...