C#基础、基础知识点、char类型的数值转换

char转为int

一个字符 ‘汉’ 怎么可能转换为数字呢?

实际上是可以的,在之前的补充资料中已经说到,计算机对字符的存储,是使用某种编码规则对应的数字来存储的。

在C#语言中,使用Unicode编码来存储字符

比如汉字 ‘汉’,对应的Unicode编码是27721,在计算机内存中,将使用汗27721对应的二进制来存储。

因此,如果要把 ‘汉’ 转换为int类型的数字,转换的结果就是27721。

那使用什么样的代码来完成该转换呢?

char类型的任何数据都可以隐式的转换为int类型

既然是隐式转换,所以,下面的代码都是正确的:

char c = ‘汉‘;int n = c;Console.WriteLine(n);n = ‘a‘;Console.WriteLine(n);

运行上面的代码,会输出:

2772197

说明 ‘汉’ 和 ‘a’ 在Unicode编码中分别是27721和97。

为什么char类型的数据赋值给int类型的变量可以使用隐式转换呢?

是因为char类型的数据在内存中存储时使用的是Unicode编码,Unicode编码占16位(两个字节),而int类型占32位(4个字节)。因此,char类型的数据占位少,取值范围小,而int类型的数据占位多,取值范围大。所以,这样的赋值是安全的,不会造成数据丢失,可以隐式转换。

int转为char

比如,我有一个int类型的变量27721,我想看看这个数字作为编码,对应的字符是什么?

这种情况,就需要把int类型的数据转换为char类型。

int类型的数据转换为char类型时必须使用显示转换

为什么必须使用显示转换呢?如果你看懂了char转为int一节,应该明白原因。

char类型的取值范围小于int,因此,将取值范围大的int类型转换为取值范围小的char类型是不安全的,所以要用显示转换。

下面的代码,是查看27721和97两个数字所代表的字符:

int n = 27721;char c = (char)n;Console.WriteLine(c);c = (char)97;Console.WriteLine(c);

字符数据的运算

char类型的数据,在进行数学运算(+、-、*、/、%)时,会将它当做int进行运算,运算的返回类型是int

也就是说,字符也可以参与数学运算,在运算的时候,会把这个字符的编码进行运算,运算的返回结果是一个整数int。

比如,’a’+’1’,这个代码计算的是’a’的编码加上’1’的编码,返回的是编码相加的整数。’a’的编码是97,’1’的编码是49,计算结果是一个int类型的整数146。

下面的代码可以很好的说明这一点。

int a = ‘a‘+‘1‘;Console.WriteLine(a);

运行后会输出146。

再比如,想想下面的代码运行后会输出什么呢?

int a = ‘a‘+1;char c = (char)a;Console.WriteLine(c);

分析一下:

  • ‘a’+1,是将a的编码加上1,结果为98,将98保存到变量a中。
  • 然后,将98转换为对应的字符,转换的结果就是字符’b’,将其保存到变量c中。
  • 最后输出变量c,就输出了字符b。

char类型的数据,在进行数学运算(+、-、*、/、%)时,会将它当做int进行运算,运算的返回类型是int。这种做法,叫做自动类型提升,实际上,不仅仅是char,取值返回比int类型小的数字类型,比如byte、short,它们也适用于自动提升规则。

比如,两个byte类型的变量进行数学运算时,也会将它们当做是int类型运算,返回结果也是int。

byte s1 = 2, s2 = 3;byte s3 = s1 + s2;

上面的第二句代码会报错,提示你int无法赋值给byte。就是因为两个byte的变量s1和s2,在进行数学运算时,会提升为int类型,它们计算的结果是一个int类型,不能隐式转换赋值给byte类型的变量s3。

之所以这样做,是因为像byte这些取值范围很小的类型,如果不提升,它们在运算时经常会导致结果超过其取值范围,超过的部分丢失掉了,得到了错误的数据。而提升为取值范围更大的int类型后,会在很大程度上解决这一问题。

时间: 2024-11-16 07:18:57

C#基础、基础知识点、char类型的数值转换的相关文章

char类型的数值转换

在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用,但也需要了解的知识. char类型的数值转换 char转为int int转为char 字符数据的运算 char转为int 一个字符 '汉' 怎么可能转换为数字呢? 实际上是可以的,在之前的补充资料中已经说到,计算机对字符的存储,是使用某种编码规则对应的数字来存储的. 在C#语言中,使用Unicode

NSString / NSData / char* 类型之间的转换

NSString / NSData / char* 类型之间的转换 1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; char fnameStr[10]; memcpy(fnameStr, [fname cStringUsingEncoding:NSUnicodeStringEncoding], 2*([fname length])); 与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节 2. NS

NSString、NSData、char* 类型之间的转换-备

1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; char fnameStr[10]; memcpy(fnameStr, [fname cStringUsingEncoding:NSUnicodeStringEncoding], 2*([fname length])); 与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节 2. NSString 转化为 char * NSString * str=

NSString NSDictionary 和char *类型之间的转换

1.字典-->字符串 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError]; NSString *string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 2.1NSString --> char * ch

char 类型的数组转换到CSting

首先,字符串“abc”在CString的保存格式是‘a’,'\0','b','\0','c','\0','\0','\0'; 从中可以看出它是以‘\0’,'\0',结束的. 当char ch[6]: ch[0]='1'; ch[1]='\0'; ch[2]='2'; ch[3]='\0'; CString str; str.fomat(_T("%s"),ch); 得到的str是“12#¥%@去”后面是乱码 并不是“12”: 但是当给ch[4]='\0',ch[5]='\0';时 得到

number类型的数值转换成某某进制

var n = '255'; console.log(n.toString(16));//255 var m = 255; console.log(m.toString(16));//ff 十进制转二进制: 语法 NumberObject.toString(radix); 二进制转十进制: 语法 parseInt(string, radix); parseInt(num,8);   //八进制转十进制 parseInt(num,16);   //十六进制转十进制 parseInt(num).to

C语言基础学习基本数据类型-Char类型

char类型 char类型用于储存字母和标点之类的字符.但是在技术实现上char却是整数类型.为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符.字符变量输入输出用%c符号.定义语法如下: char 变量名 = '一个字符值'; char类型占一个字节,所以一个char变量不能存放一个中文汉字(一个汉字占2个字节).这里单个字符必须用单引号' ',如果使用双引号,编译器将其视为字符串,我们将在后面的博文讲到字符串. 更多学习内容,就在码芽网http://www.mayacoder.

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换

大家好,今天呢我吧我所学到的一些知识点共享给大家,希望大家看完之后,要是有什么不懂的,请随时联系我,要是觉得我写的不是很好的 ,还希望你们能够谅解一下,因为小弟我刚学会写博客也没多久,很多格式和方法都不是很完善,希望大家多多包涵,好了 废话就不多说了,来谈一下今天我所学到的一些知识点吧: 今天我主要是学到了一些Java中的数据类型,其中,Java中的数据类型分为俩类------基础数据类和逻辑数据类,下面我所介绍的都是基本数据类的一些分类,至于逻辑类,由于使用次数过少,所以今天就不再这里多做介绍