c++学习笔记:变量

c++学习笔记:变量(2)

  先说明一下上一篇博文中的一个问题:char、signed char、unsigned char 这三者到底是怎么回事。

  signed char与unsigned char 是明确的拥有含义的,也就是说当定义了一个signed char那么这个char一定是有符号的整数类型。而当定义了一个unsigned char时这个char是明确无符号的整数类型。但是char却不一定了,它的行为依靠具体的实现。(“普通char究竟是有符号还是无符号,此事由实现确定。这也可能导致出现讨厌的,令人诧异的和依赖实现的情况”----斯特劳斯特卢普《c++程序设计语言》)。signed char与unsigned char更加精确但是适用的范围可能较少。

  一、类型转换。

  类型转换是一种绝大多数类型都支持的运算,它的功能就是把一个类型的对象转换为另一个类型的对象。自动的类型转换经常发生,但是名字与它相近的“强制类型转换”就不那么受欢迎了(设计不良的标志)。

  常见内置基本类型的类型转换:1、bool类型转换为非bool类型,false转换为0而true转换为1。但是当转换方向反过来时,非零值转换为true而零值转换为false。

  2、浮点数转换为整数时会去掉小数部分,保留整数部分。

  3、把整数赋给浮点数,在整数部分后面补0。

  4、当赋给带符号数的之超出范围,行为未定义。

  无符号与带符号之间的关系:

  从下面的例子看出,int先转换成了unsigned int了,假设一个值为负数的int转换为unsigned int时,就要取补码来解决。

#include<iostream>
using namespace std;
int main()
{
    unsigned u=10;
    int i=-42;
    cout<<i+i<<endl;//-84
    cout<<u+i<<endl;//32位下 4294。。。。。
   return 0;
}

  一个int如何求补码?比如int -1转换成unsigned int?首先把-1区绝对值(1)。把1按32位二进制展开 00000000 00000000 00000000 00000001

按位求反 11111111 11111111 11111111 11111110 而后把这个值加1。。。。。。果然大的离谱啊。

  unsigned int 与int之间的微妙关系有时显得极重要

  一下代码描述了一个死循,当i=0时在减一。由于i是一个无符号整数,i被转换成一个极大的整数,根本停不下来。

#include<iostream>
using namespace std;
int main()
{
    for(unsigned i=10;i>=0;--i)
    {
        /*.......*/
    }
}

二、字面值(文字值)常量

  何谓字面值(文字值)?如果一个值“一望便知”,那它就是一个字面值常量。

  整数与浮点数字面值:20(十进制)、o24(八进制)、0x24(十六进制)

3.14、3.14E0、0.、0e0、.001都是合法的常量。

  字符与字符串字面值常量:‘a’这就是字符字面值常量。而“asdfg”就是字符串字面值常量,字符串字面值常量的更多内容之后会介绍。

  转义序列:查看ASCII码表,会发现有一些不可打印的字符比如“退格”他们没有可视图符。而另一类就是“转义序列”。转义序列有\n(换行)、\t(水平制表符)等等。它们均以“\”开头,两个被当成一个字符。具体的意义可以查阅ASCII码表。需要注意的是"\"后面还可以接以x开头的十六进制数字或最多三个的八进制数字。\n为换行符\12同样是换行符。

  bool字面值:true与false就是它的字面值。

  指针字面值(稍后会说)。

注意:关于求补码的问题可以查阅相关资料,资料会讲解不同数制的补码求法。

  

    

  

  

时间: 2024-11-03 20:55:26

c++学习笔记:变量的相关文章

Sass学习笔记 -- 变量及变量作用域历史遗留问题

sass有两种后缀名文件: 一种后缀名为sass,写选择器时不能使用大括号和分号 一种后缀名为scss,使用大括号和分号 //后缀名为sass的语法,不能出现大括号和分号 $highlight-color: #abcdef .selected   border: 1px $highlight-color solid    //后缀名为scss的语法,跟css一样,需要大括号和分号 $highlight-color: #abcdef; .selected{   border:1px solid $

Python学习笔记---变量与数据类型

Python中的变量与内置数据类型 本文只是我在慕课网学习<Python入门>这门课程时,摘录.整理的一些对自己比较重要的语法与提示.九成以上的内容以及所有代码示例,均摘抄自慕课网.由于我本人有一定C/C++语言基础,而本文主要供我自己复习使用,所以我偏向于摘录一些Python和C/C++之间的差异之处,可能造成本文语义上不一定连贯,建议有学习需求的读者直接前往慕课网学习该课程(链接:http://www.imooc.com/learn/177)或是查看该门课程授课教师廖雪峰先生官方网站所给出

php学习笔记-变量的作用域

这个东西很难理解,但很重要,我觉得非常容易出错. PHP中的变量按照作用域分为有两种,一种是global,一种是local. 函数内部声明的变量就叫local型变量,只能在函数内部被访问到.一句话,local型变量只能在函数内部定义以及引用. 函数外部声明的变量叫global型变量,只能在函数的外部访问到(除了GLOBALS).这种渣渣也能叫global,真是名不副实啊!我记得以前学习过的语言不是这个样子的,只要是global,函数外还是函数内都可以访问到的,但php就是这么难搞. 我们看一个l

JavaScript学习笔记——变量和数据类型

一.javascript命名规范 1. 严格区分大小写 2. 变量的命名必须以字母或 _或 $开头,余下的部分可以是任意的字母,数字,或者是 _或者是$ 3.不能用关键字或者是保留字命名. 4.javascript自己的命名习惯 驼峰命名法:getElementById 首字母大写:Object 5.命名一定要有意义. 6. ;的用法

GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。

官方教程:https://tour.go-zh.org/basics/12 变量在定义时没有明确的初始化时会赋值为 零值 . 零值是: 数值类型为 0 , 布尔类型为 false , 字符串为 "" (空字符串). 官方示例: package main import "fmt" func main() { //下面声明的变量没有被初始化,但是也具有值,就是默认的零值 var i int var f float64 var b bool var s string fm

R语言学习笔记-变量的作用域

R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示出来. 第二步,如在global enviroment中没有找到该变量民,则搜索search list中的各个包,search list 中的内容可以用search()得到 如果用户使用library()load了一个package ,则这个package将在search list中处于第二的位置

[Swift]学习笔记----变量不会被默认初始化

顶一个变量,如果不进行初始化,是不能实用的,Swift 会报错. 目测 对象也是必须要new 才可以使用. 这又是我很赞同苹果的一个做法. Swift真不错! 而如果把变量申明为可选值,则该变量默认就会是一个 nil 值 (既空值) 语法是 var i:Int?; (吐槽以下博客园:居然不能再博客页面直接编辑博文,必须进入后台管理才可以编辑,真心弱爆了啊!看来博客园也不是写博客的长久之计!)

PHP学习笔记-变量类型转换

PHP变量类型的转换非常灵活,最常见的是字符串和数字的转换或者数字/字符串到布尔值得转换. 1.字符串到数字的转换,先写一个例子: <?php $a='37'; $a=$a+3; var_dump($a); ?> 结果是 int(40),将a的值改为'37.5',输出为float(40.5),而改为'37hello',那么输出还是int(40),但是改为'hello37',它输出就是int(3)了,由此可以总结出字符串转换为数字的规律了,字符串转换成数字,就是从左到右依次截取数字,直到不是合法

linux shell 学习笔记--变量声明与赋值,循环

Bash 变量是不分类型的 ------------------------ 不像其他程序语言一样,Bash 并不对变量区分"类型".本质上,Bash 变量都是字符串. 但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值 是否只有数字. 赋值 a=123 a="sdsd" #注意=左右不要有空格,否则就变成比较字符串操作 引用 $a #借助$符 操作字符串 字符穿连接 a="sdfs" b="dsd

Python学习笔记 | 变量 + 引用 + 拷贝 + 作用域

在Python中,变量是没有类型的,在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没有赋值,那么Python认为这个变量没有定义(not defined). 一.变量和对象 1. 可变对象和不可变对象 在Python中,对象分为两种:可变对象和不可变对象,不可变对象包括int,float,long,str,tuple等,可变对象包括list,set,dict等.需要注意的是:这里说的不可变指的是值的不可变.对于不可变类