zoukankan      html  css  js  c++  java
  • char与 int 类型转化问题汇总

    1.char变为int时高位符号扩展问题

    int main()
    {
    	char a = 0x9a;
    	int util;
    	util = (int)a;
    	if(util > 0)
    		printf("positive
    ");
    	else
    		printf("negative
    ");
    
    	return 0;
    }
    


    0x9a --- 1001 1010 但是强制转换的过程中,int是有符号的,需要对0x9a进行符号扩展,也就是用最高位1来扩展其他3个字节(架设int为4个字节)就会变成
    1111111 11111111 11111111 10011010 (8为二进制数中最高位为符号位 默认就是1为负)所以上数是二进制补码表示的-102
    将 util = (int)a 修改为 util = (int)(unsigned char)a 即可!!

     

    2.int转为char时的数据流失

    int main()
    {
    	char c;
    	while(c=getchar())!=EOF)
    		putchar(c);  
    	return 0;
    }

    各种系统都有自己默认的char类型,可能是unsigned char也可能是signed char.假设此处默认是unsigned char。

      getchar()返回一个int型,将被强制转换成unsigned char赋给c,这样当getchar读取完毕返回EOF (-1)的时候,转换成unsigned char 后的ASCII的值是255。 然后,系统在比较c(unsigned char)和EOF 时,均被转换为 unsigned int 来比较。前者是 (unsigned int)255 后者是(unsigned int )-1 ,但是8位的-1 和32 位的 -1差距却很大,永远不会相等,因此造成死循环!!

    应该改成-->>

    int main()
    {
    	int c;
    	while(c=getchar())!=EOF)
    		putchar(c);  
    	return 0;
    }
    

      

  • 相关阅读:
    浅谈java中异常处理
    Android四大组件之BroadcastReceiver
    android基本组件 Button
    Android基本组件TextView和EditView
    Unicode,GBK和UTF8
    记一次生产上的紧急修复之后解疑过程
    使用第三方jar时出现的问题
    码农歌单
    创建servlet程序知识点详解---servlet-day12
    创建servlet程序知识点详解---servlet-day07
  • 原文地址:https://www.cnblogs.com/simonLiang/p/5871450.html
Copyright © 2011-2022 走看看