最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C语言中关于char类型的溢出下的有无符号int型输出

来源:动视网 责编:小OO 时间:2025-10-01 17:53:36
文档

C语言中关于char类型的溢出下的有无符号int型输出

C语言中关于char类型的溢出下的%d(u)型输出摘要:本调试内容均在Turboc2.0环境下运行过。本机器int为2字节,char型为1字节,char有符号时表示的整型范围是-128~127。需要注意的是:整型数据在内存中是以补码形式存储的。另外如果按%d输出,那么补码中最高位的1就变成符号位(重要)了,1代表负数,而负数是以补码存放的,转换成原码输出,%u而%u是无符号输出,最高那一位不当作符号位(同等重要)。[注意文中分段]第一部分(存储形式)Case1:char为有符号型时(前8位写满
推荐度:
导读C语言中关于char类型的溢出下的%d(u)型输出摘要:本调试内容均在Turboc2.0环境下运行过。本机器int为2字节,char型为1字节,char有符号时表示的整型范围是-128~127。需要注意的是:整型数据在内存中是以补码形式存储的。另外如果按%d输出,那么补码中最高位的1就变成符号位(重要)了,1代表负数,而负数是以补码存放的,转换成原码输出,%u而%u是无符号输出,最高那一位不当作符号位(同等重要)。[注意文中分段]第一部分(存储形式)Case1:char为有符号型时(前8位写满
                  C语言中关于char类型的溢出下的%d(u)型输出

摘要:本调试内容均在Turboc2.0环境下运行过。本机器int 为2字节,char型为1字节,char有符号时表示的整型范围是-128~127。需要注意的是:整型数据在内存中是以补码形式存储的。另外如果按%d输出,那么补码中最高位的1就变成符号位(重要)了,1代表负数,而负数是以补码存放的,转换成原码输出,%u而%u是无符号输出,最高那一位不当作符号位(同等重要)。[注意文中分段]

                               第一部分(存储形式)

Case1: char为有符号型时(前8位写满倒数第8位的符号位)

   

  

 Case2:char为无符号型时(前8位写满0)

       

                                     第二部分

Case1:当以%d输出时,有两种方法:

 法1:如上表char型数据在内存中的表示形式,%d依据补码进行转换输出:

例1:{

        char a=472;

        printf(“%d\\n”,a);

      }  //结果为 -40

例2:{

      unsigned char a=472;

      printf(“%d\\n”,a);

      }//结果为 216

  依然要注意:{

                 unsigned char a=-150;

                 printf(“%d,”,a);

                 printf("%c",a);

                 }    //结果为 106,j  就是说输出%c时截取存储时的低八位就行。

    

   【补充的深层理解】 例3: {

                     char a=128;

                     printf(“%d\\n”,a-3);

                     } //结果为 -131 

             解释:可以看出当以%d输出时,是

                               a的存储 1111 1111 1000 0000

                                    +  1111 1111 1111 1101 (-3的补码)

                                    =  1111 1111 0111 1101  故为 - 131

                       例4 :{

                      char a=128;

                      printf(“%c\\n”,a-3);

                       } //结果为 } (125对应的符号为 })

             解释:可以看出当以%c输出时,是

                 以a的存储低字节 1000 0000

                                + 1111 1101 (-3的补码)

                                = 0111 0011 故为125

法2:注意:一个整型类型的变量,用任何一个超过表示范围的整数初始化,得到的值为用该整数范围作模运算后的值。

     

根据上图,如上例1,结果为472-2*256(模)= - 40;(为何-40,要在有符号的-128~127内)

根据上图,如上例2,结果为472-256(模)=216;(同理,要在0~255内)

*延伸:

{

int a=426;

printf(“%d”,a);

}//结果为 426-65536(模)= - 220(在范围内)

Case2:当以%u输出时,只有一种方法:

如上表char型数据在内存中的表示形式,%u依据补码进行直接输出:

例5:{

        char a=472;

     printf(“%u\\n”,a);

}  //结果为 65496

                                                --安徽工业大学工商学院--刘伟伟

                                                                  2013年7月

文档

C语言中关于char类型的溢出下的有无符号int型输出

C语言中关于char类型的溢出下的%d(u)型输出摘要:本调试内容均在Turboc2.0环境下运行过。本机器int为2字节,char型为1字节,char有符号时表示的整型范围是-128~127。需要注意的是:整型数据在内存中是以补码形式存储的。另外如果按%d输出,那么补码中最高位的1就变成符号位(重要)了,1代表负数,而负数是以补码存放的,转换成原码输出,%u而%u是无符号输出,最高那一位不当作符号位(同等重要)。[注意文中分段]第一部分(存储形式)Case1:char为有符号型时(前8位写满
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top