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 ...
随机推荐
- node io.sockt 聊天应用
index.html <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset=& ...
- Android之开发杂记(一)
1.cygwin环境变量设置 可在Cygwin.bat 中设置 set NDK_ROOT=P:/android/android-ndk-r8e 或者在home\Administrator\.bash_ ...
- YTU 2602: 熟悉题型——类设计( 矩形类定义【C++】)
2602: 熟悉题型--类设计( 矩形类定义[C++]) 时间限制: 1 Sec 内存限制: 128 MB 提交: 183 解决: 119 题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标 ...
- vim编辑器配置
原文链接:https://github.com/ma6174/vim http://my.oschina.net/swuly302/blog/156784?fromerr=itaFZFMb https ...
- IO(二)
package com.bjsxt.io.buffered; import java.io.BufferedInputStream; import java.io.BufferedOutputStre ...
- grep/awk/sed 或者 并且 否定
Grep 'OR' Operator Find all the lines in a file, that match any of the following patterns. Using GRE ...
- WebView中Js与Android本地函数的相互调用
介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...
- Gson解析POJO类中的泛型参数
在开发Android与API交互的时候,使用Json格式传输,遇到了这样一个情况,返回数据格式POJO类如下: public class ApiResult<T> { private in ...
- win7防火墙开启ping
默认情况下,Windows7出于安全考虑是不允许外部主机对其进行Ping测试的. 但在局域网环境中,Ping是测试网络情况的常用手段,如何允许 Windows7的ping测试回显呢? 打开: 控制面板 ...
- ASP.NET MVC+EasyUI+Entity FrameWork 整合开发
本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...