基本类型和转换操作

数据类型

C语言中的基本类型如下。

类型 存储大小 值范围
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
long long long int 8 -9223372036854775808~+9223372036854775807
unsigned long 4 字节 0 到 4,294,967,295
float 4 字节 1.2E-38 到 3.4E+38
double 8 字节 2.3E-308 到 1.7E+308
long double 16 字节 3.4E-4932 到 1.1E+4932

C# 和 java 基本数据类型如下

C#类型 java类型 描述 默认值
bool boolean 布尔值 False
byte byte 8 位无符号整数 0
char char 16 位 Unicode 字符 '\0'
decimal BigDecimal(非基本) 128 位精确的十进制值,28-29 有效位数 0.0M
double double 64 位双精度浮点型 0.0D
float float 32 位单精度浮点型 0.0F
int int 32 位有符号整数类型 0
long long 64 位有符号整数类型 0L
sbyte 无 8 位有符号整数类型 0
short short 16 位有符号整数类型 0
uint 无 32 位无符号整数类型 0
ulong 无 64 位无符号整数类型 0
ushort 无 16 位无符号整数类型 0

C语言中, char 为 一字节,使用 ASCII 编码,C# 和 Java 中,字符类型(char)都是 2字节,使用 Unicode 编码。

C# 和 Java 中 ,无论是 32 位 机器还是 64 位机器, int 都是 4 字节,long 8字节。

数据类型使用示例

C/C++

c语言的基本类型使用示例如下。

	short a = 1;	// short int a = 1;
int b = 1;
long c = 1L; // long类型,数字需要带 L
long long d = 1LL; // 两个ll char e = '1'; float f = 1.0;
double g = 1.0F; // 使用F

C语言 默认整形类型为 int,浮点数类型为 float。

因此赋值常量的时候,如果不是默认的类型,则需要在数值后加上 L 或 F。

short 不需要加;double 加的是 F。

【图片来自:biancheng.net】

C语言中,不同进制的表示方法:

  • 默认为10进制 ,如10 ,20,直接赋值即可。
  • 8进制,开头加上0,如012,013。
  • 二进制,开头加上0b,如0b11。
  • 16进制,开头加上0x,大小写不分,0x21458adf。

注意的是,只有整型才能有这些进制表示法,浮点型不行的。

C#、JAVA

C# 和 JAVA 中使用上面同样示例,如下

            short a = 1;
int b = 6_666_666;
long c = 1L; // long类型,数字需要带 L char e = '1'; float f = 1.0F;
double g = 1.0; byte h = 1;

C# 和 JAVA 中默认整型是 int,浮点型是 double。

因此 float 要带 F。

C# 和 JAVA 中使用的进制表示法,跟 C 语言一致。

另外,C# 和 JAVA 中,可以使用下划线来分隔数字,提高可读性。例如

            int b = 6_666_666;
int b = 0b00000000_00000000_00000000_00000001;

关于布尔型

C 语言中,没有布尔型。

C++ 为 bool,C# 为 bool,java 为 boolean。

C语言中没有 bool 类型,但是很多地方都需要 true 和 flase,怎么解决呢?

C 语言 一般使用 1 和 0 或 非0 和 0 表示 true 和 flase。

对于有些地方,\0 也代表了 false。

例如

int a = 6666;
int b = 161616;
printf("%s",a & b?"true":"flase");

a&b 的结果是一个数字,只要大于 0 或 小于 0 ,即为 true。

而且 C# / Java 中,?: 运算符,左侧条件必须是 bool ,不能为数字。

基本类型的操作

操作方法从哪里来

高级语言提供了大量优秀的库代码,通过调用这些代码,我们可以实现许多骚操作,减少工作量。

首先我们来看一下 C# 和 java 的一部分代码

// C#
int a = new int();
a = 666; Int32 b = new Int32();
b = new int();
b = 666;
// JAVA
int a = 666; Integer b = new Integer(666);

在 C# 中,每个预定义类型(基本数据类型)都是系统提供的类型的简写。

例如,关键字int指的是 struct System.Int32。

也就是说, C# 中,int , System.Int32 是等同的。

而在 JAVA 中,int 是基本数据类型,Integer 则是一个包装了 int 的类型,为 int 类型提供了丰富的操作方法。

因此,在 JAVA 中,int a = new int() 的使用是错误的。

C# 中的 int 类型,带有一些方法,但是不多。

JAVA 的 Integer 类提供了一些比较丰富的操作方法。

例如转换字符串为数字,C# 主要靠 Convert 进行转化,JAVA 通过 Integer 就可以操作。

在 C 语言中,基本类型的操作方法,来源于库函数。

字符串转为数值

C

需要注意的是,C语言中没有字符串类型(string)。

C语言中, stdlib.h 头文件定义了几个基本类型以及一些函数。

我们可以将字符串这样转为 int 类型

	char a[] = "123";
int b = atoi(a);

从互联网中,我抄录了一些常用的转换函数:

● atof():将字符串转换为双精度浮点型值。

● atoi():将字符串转换为整型值。

● atol():将字符串转换为长整型值。

● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

● itoa():将整型值转换为字符串。

● ltoa():将长整型值转换为字符串。

● ultoa():将无符号长整型值转换为字符串。

● gcvt():将浮点型数转换为字符串,取四舍五入。

● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。

● fcvt():指定位数为转换精度,其余同ecvt()。

C++

C++ 引入 #include <iostream>后,就可以直接使用上面 C语言 的函数。

C++可以使用 #include <string> 这个库;C++ 中, string 类型在 string 这个库中定义。

#include <sstream> 这里,可以更加方便地字符串和数值转换。例如

#include<iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
//字符转数字
string str1 = "2018219";
string str2 = "2018.219";//浮点数转换后的有效数为6位
int num1 = 0;
double num2 = 0.0;
stringstream s;
//转换为int类型
s << str1;
s >> num1;
//转换为double类型
s.clear();
s << str2;
s >> num2;
cout << num1 << "\n" << num2 << endl;
return 0;
}
// 示例来源 https://www.jianshu.com/p/5c6a6fdb1a41

另外还可以通过 sprintf() 和 sscanf()函数来实现字符串与数值的转换。

C#

C# 转换字符串为数值,非常简单

            string a = "123";

            int b = int.Parse(a);           // int 也包含一些常用方法
int c = Convert.ToInt32(a); // 静态类 Convert 中,还有很多的转换方法和重载方法

Convert 有各种基本类型相互转换的方法。

JAVA

JAVA 中,可以这样转换

        String a = "123";
int b = Integer.valueOf(a); // 通过静态方法 Integer c = new Integer(a); // 将 Interger 类转为 int
b = c.intValue();

可以看出,JAVA 中,基本数据类型没啥方法,就是单纯表示数值。

C# 中除了 类型本身带有的方法外,通过 Convert 中丰富的丰富,实现类型转换;

JAVA 中,要使用相应数据类型的对象进行操作,例如 int 是 Integer,double 是 Double。

        String a = "123.123";
double b = Double.valueOf(a);

默认值和初始化

C# 和 JAVA

C# 和 JAVA ,任何声明但没有赋值的局部变量,是不能直接使用的。



在某些情况下,如果没有初始化赋值,系统会自动设置默认值。

例如 C# 和 JAVA 中

        static void Main(string[] args)
{
Test(b);
Console.ReadKey();
} public static int b;
public static void Test(int a)
{
Console.WriteLine(a);
Console.WriteLine(b);
}
    public static void main(String[] args) {
Test(b);
} public static int b; public static void Test(int a) {
System.out.println(a);
System.out.println(b);
}

输出结果都是 0。

C# 中这些情况下会自动初始化设置默认值

  • 静态变量。
  • 类实例的实例变量。
  • 数组元素。

JAVA 的默认值情况 跟 C# 一样。

另外,C# 有个 default 关键字,可以自动赋予默认值。

int a = default(int);
// 或
int a = default;

在一些暂时不需要赋值或碰到编译器不让通过时,设置常量默认值可能会导致歧义,使用 default 特别方便。

C语言

我们先写个例子来运行一下

#include <stdio.h>
int a;
char b[5];
int main()
{
printf("%d",a);
printf("\n\n");
printf("%s",b);
printf("\n\n");
return 0;
}

如无意外,会出现 a 为0,b 为空白。

我们改一下代码,重写运行

#include <stdio.h>

int main()
{
int a;
printf("%d", a); printf("\n\n");
char b[5];
printf("%s", b);
return 0;
}

上面的代码在 c-free 等编译器可以编译通过,在 Vsual Studio 不能(原因是变量a)。

如果强行通过的话,运行后会出现

3567616

亐wP@

修改一下,变成下面的代码,在 Vsual Studio 中运行,会出现 烫烫烫烫烫烫烫烫烫烫烫烫烫烫...

#include <stdio.h>

int main(){
char b[5];
printf("%s", b);
return 0;
}

以上示例可以看出,C 语言也是有默认值的,静态变量会出现默认值。

字符数组,声明时,系统会分配内存,并且为每个字节的设置值。

而 char 表示范围最大只有256。

C/C++、C#、JAVA(二):基本类型和转换操作的更多相关文章

  1. Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  2. Java学习--Java 中基本类型和字符串之间的转换

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  3. Java开发学习--Java 中基本类型和包装类之间的转换

    Java 中基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之 ...

  4. 【Java】基本类型和引用类型(值传递)

    [关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...

  5. Java 基础 - 基本类型和引用类型

    ref: https://www.cnblogs.com/ysocean/p/8482979.html#_label2 ------------------ 这里再给大家普及一个概念,在 Java 中 ...

  6. Java基础——基本类型和包装类、基本类型和字符串之间的转换

    基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更 ...

  7. Java基础(35):装箱与拆箱---Java 中基本类型和包装类之间的转换(Wrapper类)

    基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了. 那什么是装箱 ...

  8. java的基本类型和对应的封装类

    封装,是java这门语言的重要核心思想之一,封装也是对面向对象这一思想很好的体现. 在很多情况下,我们需要对数据进行一些转换,如:将一字符串"123"转换成int类型的123,或者 ...

  9. java中基本类型和包装类型实践经验

    至今,小菜用java快两年了,有些事,也该有个总结. 基本类型和包装类型的概念在本文不作赘述. 如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但 ...

随机推荐

  1. 基于Dockerfile制作tomcat镜像

    Docker 概述:   在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...

  2. Python---14面向对象高级编程(__slots__&@property)

    一.使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Stude ...

  3. 吴裕雄--天生自然 python数据分析:基于Keras使用CNN神经网络处理手写数据集

    import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.image as mp ...

  4. SQL语言基础及数据库的创建

    一.数据类型:1.二进制数据二进制数据以十六进制形式存储.二进制数据最多能存8000个英文字符,4000个汉字字符. 2.字符数据char:存100,不足100补足.varcha:存多少占多少. 3. ...

  5. loadrunner通过socket测接口

    #include "lrs.h" Action() {     //建立到服务端的连接     lrs_create_socket("socket1",&quo ...

  6. 达拉草201771010105《面向对象程序设计(java)》第十周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十周学习总结 实验十  泛型程序设计技术 实验时间 2018-11-1 第一部分:理论知识        泛型:也称参数化类 ...

  7. 简单说 通过CSS的滤镜 实现 火焰效果

    说明 上次我们了解了一些css滤镜的基础知识, 简单说 CSS滤镜 filter属性 这次我们就来用css的滤镜实现一个 火焰的效果. 解释 要实现上面的火焰效果,我们先来了解一些必要的东西. 上次我 ...

  8. 关于Js的那些面试题

    1.javascript的typeof返回哪些数据类型 number string boolean Object function underfind 2.例举3种强制类型转换和2种隐式类型转换?强制 ...

  9. java调用DLL,打印二维码标签

    package com.ian.das.controller; import java.util.List; import org.xvolks.jnative.JNative; import org ...

  10. "长辈牌"电子产品:有一种评论朋友圈叫给你打电话

    一.长辈们使用电子产品的姿势集合 先问你一个问题:「怎么下载搜狗输入法?」 (非广告) 摁?看到这篇文章的你可能都有点懵,不就下载安装就完了吗?但是,真的就只是这样吗? 前一段时间,当家里的长辈问到我 ...