int short型类型转换

  

 变量值的存储
变量被定义以后,系统在运行时会为该变量分配一个相应大小的存储空间,称为存储单元
给变量赋值后,该变量对应的存储单元中会存放该值,这个值称为变量的值
那么变量的值在变量的存储单元中是如何表示的呢?
(1)整数是以补码的形式存放的。
(正数的补码是其本身,负数的补码为原码按位取反加1)
如:int   a=2,   b;       b= -2;   (这里int是2个字节)

a 00000000 00000010

b 11111111 11111110

2的原码表示:00000000 00000010
-2的补码表示:11111111 11111101+1=11111111 11111110

 

(2)特殊情况:最大、最小和0的存储


最大值:2^15-1(32767):

0 1111111 11111111
16 9~15 1~8

最小值:-2^15    (-32768)

1 0000000 00000000
16 9~15 1~8

0的存储如下:

0

0000000

00000000

16

9~15

1~8

(3)超出范围的情况(溢出)

①、阅读下面的程序段,程序段的输出结果是()

  1. int i=65536;  printf(“%d”, i );  
  1.     A)65536  B)0   C)有语法错误,无输出结果   D)1  
  2.  说明:65536=216,即:1 00000000 00000000,第17位上为1,后面16位均为0。存储时只能存放16位,即16个0。故结果为0。  

 

②、若有下面的程序段,则输出结果为()

 

  1. int a=32768;  printf(“%d”, a);     
  1. 说明:32768=215,即 10000000 00000000,第16位上为1,后面15位均为0。存储时只能存放16位,最高位为1,故结果为-32768。  


③、若有下面的程序段,则输出结果为()

  1. int a=65549;  printf(“%d”,a); 已知65549=1 00000000 00001101B   (13)  
  1. int b=131069;  printf(“%d”,a); 已知131069=1 11111111 11111101B  (-3)  

题目:在32位计算机里

  1. int a = -65536;  
  2. short b = a;  
  3. a = b;  
  4. a=?  

在int存储中 -65536 = 10000000 00000000 00000000 00000000

所以short只取int后面两个字节。

a=0

 

如a=65533

则a = 00000000 00000000 11111111 11111101

b是有符号的short  = 11111111 11111101 = -3

阅读更多
文章标签: 存储 c
个人分类: linux.C
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭