C语言的 (强制类型转换) 以及 '字符字面值'
C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型、内容都不变。
以下代码,都用GCC编译。
#include<stdio.h> int main()
{
char c = 'a';
printf("%d %d %d\n", c, sizeof(c), sizeof((int)c)); //输出为97,1,4. 第二个sizeof的作用对象为一个int型中间变量 c = ;
printf("%d\n", c); //输出-1. char型的c已溢出,隐式转换为int后同样保持为-1
printf("%d\n", (unsigned char)c); //输出255. 要想确保c强制转换后为非负数,例如作为数组下标,应先转换为unsigned char return ;
}
之前以为单引号多字符,比如'123'会报错,测试了一下才发现只会警告(GCC,代码里给出警告信息),能编译通过:
#include <stdio.h> int main()
{
printf("%d\n", '' ); //输出49
printf("%d\n", '' ); //输出12594 警告:warning: multi-character character constant
printf("%d\n", '' ); //输出3224115 警告:同上
printf("%d\n", '' ); //输出825373492 警告:同上
printf("%d\n", '' ); //输出842216501 警告:warning: character constant too long for its type
printf("%d\n", '' ); //输出859059510 警告:同上
printf("%d\n", '' ); //输出875902519 警告:同上
printf("%d\n", '' ); //输出892745528 警告:同上
printf("%d\n", ''); //输出909588537 警告:同上 return ;
}
以上分别输出1~9个数字组成的字符字面值,输出类型为int型,中间有个隐式类型转换的过程。
第一行输出'1'的ASCII码值49;
第二行则将'1'和'2'的ASCII码值分别赋予int型中间变量的低位2个字节,即0x3132,所以输出为12594 = (49 << 8) + 50;警告信息提示为多字符字面值;
第三四行的结果原理同上;
第五行以下的,原理同上,但是只取低4位,例如第9行,只取'6789',即0x36373839;警告信息提示字符字面值超出int类型的字节数。
C语言的 (强制类型转换) 以及 '字符字面值'的更多相关文章
- C语言中强制类型转换总结
C语言中强制类型转换总结 ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...
- C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...
- C语言的强制类型转换
1.什么是强制类型转换:遇到一些类型不同的一些数据之间的表达运算 ,需要将较高的数据类型转换成较低类型时. 2.强制类型的形式: (强制转换的类型)(表达式): 2.强制类型的使用: float a, ...
- C语言:强制类型转换
#include <stdio.h> //强制类型转换 //写法:(类型标识符)变量:(类型标识符)常量:(类型标识符)(表达式):三种格式 main() { float a=7.5f; ...
- C语言与C++语言的强制类型转换格式区别
C语言:(类型)(表达式),其中类型的括号()必须带. C++语言:(类型)(表达式),其中类型的括号()跟进表达式选带.
- C++四种强制类型转换关键字
C语言使用强制类型转换(Type Cast)很简单,不管什么类型的转换,形式都如下: TYPE b = (TYPE)a; c++提供了4种类型转换操作符来应对不同场合的应用. const_cast ...
- C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ...
- C++中的强制类型转换
在C语言中,强制类型转换的方式为(Type)Expression,另外还有一种现在已经不用的旧式写法Type(Expression),这两种方式是等价的. 但是,C语言的强制类型转换方式存在一些问题: ...
- C++ 强制类型转换详解
类型转换只不过是让编译器以另外一种方式解释一块内存而已.C++兼容C语言的强制类型转换方式,同时也提供了新型的基于模板的类型转换方式,来提供更多的安全性. 一.C风格的强制类型转换 double k ...
随机推荐
- js获取滚动条距离浏览器顶部,底部的高度,兼容ie和firefox
做web开发经常会碰到需要获取浏览器的滚动条与顶部和底部的距离,然后做相应的处理动作.下面作者就如何通过js来获取浏览器滚动条距离浏览器顶部和底部的高度做一下分享,这个是同时兼容ie和firefox的 ...
- c# ffmpeg常用参数
c# ffmpeg常用参数 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 ...
- sql2000无法打开1433端口及解决方法
1.如果你是win2003,那么一定要安装sql的补丁sp3a以上版本SP 检查你的SQL有没有打补丁,没有的话要打上补丁,检查的方法是在查询分析器中运行:select @@version如果出来的版 ...
- MapReduce读取hdfs上文件,建立词频的倒排索引到Hbase
Hdfs上的数据文件为T0,T1,T2(无后缀): T0: What has come into being in him was life, and the life was the light o ...
- Evaluate Reverse Polish Notation(堆栈)
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- Kafka安装与实验
接上面一篇文章: http://www.cnblogs.com/charlesblc/p/6038112.html 主要参考这篇文章: http://www.open-open.com/lib/vie ...
- ImageView 设置图片
android doc中是这样描述的: public void setImageResource (int resId) 这是其中的一个方法,参数resld是这样: ImageView.setIm ...
- sqlserver重命名字段名称
EXEC sp_rename 'S2BASE_PRODUCT.[PRODUCT_ID]','TABTYPE_ID','COLUMN';
- CodeForces Round #250 Div2
A. The Child and Homework 注意仔细读题,WA了好多次,=_= #include <cstdio> #include <cstring> #includ ...
- 你其实真的不懂print("Hello,world")
http://www.jianshu.com/p/abb55919c453 debugPrint在发布的版本里也 会输出debugPrint只是更倾向于输出对象的调试信息.不管是开发环境还是测试环境都 ...