cgg之字面值
字面值时源代码中用来描述固定值的记号,可能是整数、浮点数、字符或者字符串
2.1 整数常量
除了常见的十进制数外,还有八进制(以数字0开头)或者十六进制(0x/0X)表示法。
#include <stdio.h> int main()
{
int x = ;
int y = 0x0A; printf("x=%d,y=%d\n",x,y);
return ;
}
输出:
x=8,y=10
常量类型可以通过后缀来区分类型
0x200 -->int
200U -->unsigned int 0L -->long
0xf0f0UL -->unsigned long 0777LL --->long long
0xFFULL --->unsigned long long
2.2 浮点常量
默认浮点常量是double,可以用F后缀表示float,用L后缀表示long double
printf("%f\n",0.111111111F);
printf("%f\n",0.11111);
printf("%Lf\n",.9999999999L);
printf("%Lf\n",.99L);
输出:
0.111111
0.111110
1.000000
0.990000
对于long double输出必须使用%Lf的格式,否则输出结果是错误的。
2.3 字符常量
字符常量默认是int类型,除非用前置L表示wchar_t宽字符类型
#include <stdio.h>
#include <locale.h> int main()
{
int i; printf("%c,%c,%c\n",c,c2,c3); setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t wc = L'中'; char buf[] = {}; int len = wctomb(buf,wc); printf("%d\n",len); for(i = ; i<len; i++)
printf("0x%02X ",(unsigned char)buf[i]);
printf("\n"); return ;
}
输出:
0xE4 0xB8 0xAD
使用python进行验证
>>> astr='中'
>>> astr
'\xe4\xb8\xad'
结果正确。
2.4 字符串常量
C语言中的字符串是一个以NULL(也就是\0)结尾的char数组。
空字符串在内存中占用一个字节,包含一个NULL字符。
char s[] = "Hello,World!\n";
printf("strlen=%d\n",strlen(s));
printf("sizeof=%d\n",sizeof(s)); #输出结果为: strlen=
sizeof=
------------------------------------------------------------------
char* ps = "Hello,World!\n";
printf("strlen=%d\n",strlen(ps));
printf("sizeof=%d\n",sizeof(ps)); #输出结果为:
strlen=
sizeof=8 #是指针char*代表的大小
同样可以使用L前缀声明一个宽字符串。
#include <stdio.h>
#include <locale.h> int main()
{
int i; printf("%c,%c,%c\n",c,c2,c3); setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t* ws = L"中国人"; char buf[] = {}; size_t len = wcstombs(buf,ws,); printf("%ls\n",ws);
printf("%d\n",len); for(i = ; i<len; i++)
printf("0x%02X ",(unsigned char)buf[i]);
printf("\n"); return ;
}
输出:
中国人 0xE4 0xB8 0xAD 0xE5 0x9B 0xBD 0xE4 0xBA 0xBA
使用python进行验证:
>>> astr="中国人"
>>> astr
'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
和char字符串类似,wchar_t字符串以一个4字节的NULL结束。
#include <stdio.h>
#include <locale.h> int main()
{
int i; setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t ws[] = L"中国人"; printf("%ls\n",ws); printf("len=%d,size=%d\n",wcslen(ws),sizeof(ws)); int len = sizeof(ws);
unsigned char* b = (unsigned char*)ws; for(i = ; i<len; i++)
printf("0x%02X ",b[i]);
printf("\n"); return ;
}
输出结果为:
中国人
len=3,size=16
0x2D 0x4E 0x00 0x00 0xFD 0x56 0x00 0x00 0xBA 0x4E 0x00 0x00 0x00 0x00 0x00 0x00
编译器会自动连接相邻的字符串,便于在宏或者代码中更好地处理字符串。
对于源代码中超长的字符串,除了使用相邻字符串外,还可以用"\"在行尾换行,这个在很多语言都支持。
#include <stdio.h>
#define WORLD "world!"
int main()
{
char* s = "Hello" " "WORLD"\n"; char* s2 = "Hello"
" World!\n"; char* s3 = "Hello \
World!\n";
printf("%s",s);
printf("%s",s2);
printf("%s",s3);
return ;
}
输出结果为:
Hello world!
Hello World!
Hello World!
cgg之字面值的更多相关文章
- C++中的字面值指定类型
C++中只有内置类型存在字面值,没有类(class)类型字面值.例如:0是int类型的字面值,3.14159是double类型的字面值. 字面值类型很多 整型浮点字面值 20 ...
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- c++学习笔记——字面值常量类
字面值常量类:数据成员都是字面值类型的聚合类是字面值常量类.如果一个类不是聚合类,但是它符合一下要求,则它也是个字面值常量类: 1.数据成员都必须是字面值类型. 2.类必须至少含有一个constexp ...
- Java基础-字面值
在Java源代码中,字面值用于表示固定的值(fixed value).数值型的字面值是最常见的,字符串字面值可以算是一种,当然也可以把特殊的null当做字面值.字面值大体上可以分为整型字面值.浮点字面 ...
- Python文本(字面值)
Python中的文本是一些内置类型的常量表示方法. 字符串和字节 字符串是一系列的字符序列,Python中用单引号(''),双引号(""),或者三个单引号(''' ''')三个双引 ...
- C语言的 (强制类型转换) 以及 '字符字面值'
C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型.内容都不变. 以下代码,都用GCC编译. #include<stdio.h> int main() { char c = ...
- 使用#define定义字面值和伪函数
#define是C语言提供的宏命令,其主要目的是:在编程时,为程序员提供一定方便,并能在一定程度上提高程序的执行效率.#define将一个标示符定义为一个字符串,该标示符被称为宏,被定义的字符串称为字 ...
- C++ 字符串字面值
C++ 字符串字面值 C++ 基本字符串类型 C++ 字符串类型 char 和 wchar_t c11 新增了 char16_t 和 char32_t 例子: wchat_t title[] = L& ...
- c风格字符串,字符串字面值,c++字符串
C风格字符串:本质上就是以空字符null为结束符的数组 可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组 字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多 ...
随机推荐
- 设置MySQL最大连接数
<pre name="code" class="sql">在使用MySQL数据库的时候,经常会遇到这么一个问题,就是"Can not co ...
- Jquery 多选全选/取消 选项卡切换 获取选中的值
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- WPF 在事件中绑定命令(不可以在模版中绑定命令)
其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是 ...
- Elasticsearch分片、副本与路由(shard replica routing)
本文讲述,如何理解Elasticsearch的分片.副本和路由策略. 1.预备知识 1)分片(shard) Elasticsearch集群允许系统存储的数据量超过单机容量,实现这一目标引入分片策略sh ...
- linux RPM软件包管理
linux RPM软件包管理 目录 1.软件包的介绍 2.rpm包管理 3.rpm包管理前端工具 1.软件包的介绍 在我们在对软件包管理前,先对软件包有个很好的了解,这样更方便我们来对其进行管理. 软 ...
- 苹果 AR 新专利马上登陆 Facetime|Facebook 要用 VR 玩直播
附上VR技术福利视频 链接: https://pan.baidu.com/s/1boGGVs7 密码: viy8 点击关注有更多VR技术资源哦 苹果 AR 新专利马上登陆 Facetime ,使用光场 ...
- VB改变文件及文件夹属性的函数
'以下为FSO对象的使用示例(VB6.0) Private myFSO As New FileSystemObject Private myFile As File Private myFolder ...
- 墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...
- 【转】认识物理I/O构件- 主机I/O总线
在数据离开系统内存总线后,它通常传输到另一条总线,即主机I/O总线.在今天的产品中,最常见的主机I/O总线是PCI总线,但也存在着几种其他的总线,如S -总线,EIS A总线及VME总线.主机I/O总 ...
- Spring MVC 快捷定义 ViewController
WHY : 为什么我们需要快捷定义 ViewController ? 在项目开发过程中,经常会涉及页面跳转问题,而且这个页面跳转没有任何业务逻辑过程,只是单纯的路由过程 ...