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

  1. int main()
  2. {
  3. char a = 0x9a;
  4. int util;
  5. util = (int)a;
  6. if(util > 0)
  7. printf("positive\n");
  8. else
  9. printf("negative\n");
  10.  
  11. return 0;
  12. }

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时的数据流失

  1. int main()
  2. {
  3. char c;
  4. while(c=getchar())!=EOF)
  5. putchar(c);
  6. return 0;
  7. }

各种系统都有自己默认的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差距却很大,永远不会相等,因此造成死循环!!

应该改成-->>

  1. int main()
  2. {
  3. int c;
  4. while(c=getchar())!=EOF)
  5. putchar(c);
  6. return 0;
  7. }

  

char与 int 类型转化问题汇总的更多相关文章

  1. char,String,int类型互转

    1.ascci码对应转换 字符,对应的ascii(其实是UTF-16)码:     char c='a'; int k=(int) c;    结果k=97 数字,对应的字符:     int k=9 ...

  2. getchar返回int类型

    #include <stdio.h> /* copy input to output; 2nd version */main(){int c;c = getchar();while(c ! ...

  3. 17.3.10--关于C元的变量类型所占字节问题和类型转化

    在C语言并没有对于严格规定short,int  long所占字节,只是做了宽泛要求:short:至少连个字节 int建议为一个机器字长,32位环境下机器字长是4个字节,64位环境机器字长是8个字节 s ...

  4. Java中byte、short、char、int、long运算时自动类型转化问题

    -------------------------------------------------------------------------------------------------- ★ ...

  5. char 数组和 int 之间转化

    上周工作结束,来到斯凯网络也将近半个月来. 没有新人的感念,最多的是将自己当作一个战士. 废话不多说,直接入正题,在没有仔细考虑问题之前我们总会 觉得:这尼玛的有毛线难度啊,不就是一个 int 转为c ...

  6. (C语言)char类型与int类型相加

    #include <stdio.h> int main(void) { ; ; int c = a + b; a += b; printf("c=%d",c); //p ...

  7. c++中char类型字符串拼接以及int类型转换为char类型 && 创建文件夹

    如下所示: #include <iostream> #include <windows.h> #include <cstring> using namespace ...

  8. int类型与char类型的转换

    ---------siwuxie095                 Java对char类型的数据在底层是按int类型来处理的 (只是显示出来仍然是字符型)         1.int类型与char ...

  9. Java JNA (四)—— void**、void*、char**、char*、int*等类型映射关系及简单示例

    ByReference类有很多子类,这些类都非常有用. ByteByReference.DoubleByReference.FloatByReference. IntByReference.LongB ...

随机推荐

  1. Dll学习(二)__declspec用法详解

    __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范,而__declspec是一种 ...

  2. python中operator.itemgetter

    直接上例子: rs=  [...     {...       "datetime": "Mon, 31 Aug 2015 23:00:00 GMT",...  ...

  3. TCP/IP详解学习笔记(7)-- 初识运输层

    作为TCP和UDP协议的学习前奏,简单的介绍一下运输层的相关内容,方便对TCP,UDP的学习. 1.概述      运输层的任务主要是负责主机中两个进程之间的通信.      运输层的基本功能: 复用 ...

  4. 再论prototype

    前段时间曾经写过一篇关于prototype原型的文章(http://www.cnblogs.com/ttcc/p/3751604.html),但是对于JS的核心之一,还是应该多多熟悉才行,常回过头来看 ...

  5. C# 特性Attributes 和反射

    一,Attributes 类新建一个子类,DetailAttributes 二, 在类的属性声明上面加Attributes public class testAttributes { [Detail( ...

  6. WWF3自定义活动<第八篇>

    WWF提供了对原有活动进行扩展以及自定义新活动的功能,用户可以通过"Workflow Activity Library"创建和开发自定义活动. 一.自定义活动类型 默认情况下,创建 ...

  7. vm虚拟机里的桥接模式下“复制物理网络连接状态”作用

    前提:真实主机可以上网 勾选,虚拟机也可以上网 不勾选,虚拟机不可以上网

  8. 010GCC程序编译

    1.GCC的特点: Gcc(GUN C Compiler)是GUN推出的功能强大.性能优越的多平台编译器,是GUN的代表作制衣.GCC可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比 ...

  9. .NET中的IO操作之文件流

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  10. shell下添加计划性任务

    */1 * * * * /bin/sh /tmp/hello.sh ###每1分钟执行以下/tmp下的hello.sh脚本 service crond restart   重启任务计划 * 12  * ...