思考:

int ch = ‘A’;

int ch1 = 65;

int ch2 = 321;

printf("%c %c %c\n", ch, ch1, ch2);的输出结果是什么?

char ch = 0;

char ch1 = -128;

char ch2 = 128;

char ch3 = 256;

printf("%d %d %d %d\n", ch, ch1, ch2, ch3);的输出结果又是什么?

我们都知道,char字符类型根据ASCII码表中的ascii值显示字符,并且char类型的范围为-128~127,但是像char ch = 256;这种赋值仍然可以赋值成功,通过上面的思考我已经有了一定的猜想。



输出结果:A A A 0 -128 -128 0


猜想:

char类型的范围为-128~127

  1. char ch1 = 128;输出:-128

     分析:127char的右极限值,-128char的左极限值
  2. char ch3 = 256;输出:0

     分析:256char的容量

总结:当输入的值大于char的一边极限值时,会从另一边开始以剩余的差值计算。





测试:

#include <stdio.h>

int main()
{
char ch;
for (int i = 0; i <= 512; i++)
{
ch = i;
printf("%d -> %d\n", i, ch);
} return 0;
}

输出:

0   ->    0
1 -> 1
2 -> 2
省略部分输出结果 ……
127 -> 127 //char -128~127
128 -> -128
129 -> -127
省略部分输出结果 ……
254 -> -2
255 -> -1
256 -> 0
257 -> 1
258 -> 2
省略部分输出结果 ……
510 -> -2
511 -> -1
512 -> 0

很好,测试结果与我们猜想的一致,那么问题又来了,究竟是不是所有的类型赋值方法都是这样呢,还是只有char是个特例呢?

unsigned char测试

	//unsigned char 0 ~ 255
unsigned char ch = 0; //0
unsigned char ch1 = -1; //255 = 256 -1
unsigned char ch2 = 256; //0 = 0+256
unsigned char ch3 = 250; //250 = 0+255
unsigned char ch4 = 300; //44 = 256+44
unsigned char ch5 = 400; //144 = 256+144
unsigned char ch6 = -200; //56 = 256 - 200

unsigned char类型容量为256,则256的倍数全为0(循环一圈回到0位置),可以根据这一特点计算。

例如:

  • 正数n(>255)

    • 256的倍数     0
    • n == k×256+x  x
  • 负数n(>255)
    • 256的倍数     0
    • n == -k×256+x x

对于char类型,也可以根据取值范围整理出相应的计算公式。大家可对照测试结果自行整理。


此外,int unsigned in short ……等中应该也成立,这里就不再做测试。

另附上

  int 越界处理:可以通过位运算的方式求得各类型的取值范围。

  '\ddd’转义字符与八进制转换:char类型的其他赋值方式

char的越界赋值即其原理剖析的更多相关文章

  1. iPhone/Mac Objective-C内存管理教程和原理剖析

    http://www.cocoachina.com/bbs/read.php?tid-15963.html 版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所 ...

  2. 【Xamarin 跨平台机制原理剖析】

    原文:[Xamarin 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原 ...

  3. 【Xamain 跨平台机制原理剖析】

    原文:[Xamain 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址] Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原生 ...

  4. ThreadLocal及InheritableThreadLocal的原理剖析

    我们知道,线程的不安全问题,主要是由于多线程并发读取一个变量而引起的,那么有没有一种办法可以让一个变量是线程独有的呢,这样不就可以解决线程安全问题了么.其实JDK已经为我们提供了ThreadLocal ...

  5. 开源 serverless 产品原理剖析 - Kubeless

    背景 Serverless 架构的出现让开发者不用过多地考虑传统的服务器采购.硬件运维.网络拓扑.资源扩容等问题,可以将更多的精力放在业务的拓展和创新上. 随着 serverless 概念的深入人心, ...

  6. 0000 - Spring 中常用注解原理剖析

    1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...

  7. Spring 中常用注解原理剖析

    前言 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来配置 ...

  8. 原理剖析-Netty之服务端启动工作原理分析(下)

    一.大致介绍 1.由于篇幅过长难以发布,所以本章节接着上一节来的,上一章节为[原理剖析(第 010 篇)Netty之服务端启动工作原理分析(上)]: 2.那么本章节就继续分析Netty的服务端启动,分 ...

  9. threading.local()使用与原理剖析

    threading.local()使用与原理剖析 前言 还是第一次摘出某个方法来专门写一篇随笔,哈哈哈. 为什么要写这个方法呢?因为它确实太重要了,包括后期的Flask框架源码中都有它的影子. 那么我 ...

随机推荐

  1. Neo4j入门日志(一)导入数据

    本文主要来源于: neo4j的官方文档 使用的是neo4j官方提供的导入方式,即使用import,在cmd中进行导入. 1.导入的基本方式 bin/neo4j-admin import --datab ...

  2. 论文解读(GIN)《How Powerful are Graph Neural Networks》

    Paper Information Title:<How Powerful are Graph Neural Networks?>Authors:Keyulu Xu, Weihua Hu, ...

  3. 进程&线程(二):Thread相关方法与属性

    学习自:python进程.线程.协程 - 张岩林 - 博客园 1.threading.Thread Thread方法 方法(使用方法为Thread.xxx) 说明 start() 激活线程 getNa ...

  4. 『现学现忘』Docker相关概念 — 4、虚拟化概念

    目录 1.虚拟化的概念 2.为什么出现虚拟化 3.虚拟化技术 1.虚拟化的概念 虚拟化是指通过虚拟化技术将计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操 ...

  5. JZ-055-链表中环的入口结点

    链表中环的入口结点 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目链接: 链表中环的入口结点 代码 import java.util.ArrayList; ...

  6. netty系列之:NIO和netty详解

    目录 简介 NIO常用用法 NIO和EventLoopGroup NioEventLoopGroup SelectorProvider SelectStrategyFactory RejectedEx ...

  7. 【C#操作Excel】同名Excel放入同一文件夹中,然后合并为同一个Excel文件

    近期有对Excel操作的需求,由于都是重复劳动,故分享代码如下,本人也是技术菜鸟没有考虑性能,如果有大牛能够指教就再好不过了 事先电脑中需要安装Excel,然后Vs中引用Microsoft.Offic ...

  8. 2021-08-02(console、comfrim)

    1.console对象 1.输出信息: console.info()别名 console.log(); 2.复合类型表格展示 console.table(obj) || console.table(A ...

  9. NTFS权限概述

    NTFS权限概述 NTFS是我常见的一种磁盘格式,在Windows系统中使用广泛,它打破了FAT的局限性.在我使用ntfs格式分区的时候经常会涉及到ntfs权限设置问题,来帮助我们对文件的处理.那么什 ...

  10. lgP6232题解

    评蓝过分了吧,这题最多黄( 首先我们从挂钩的最上层向下走,假设这个挂杆的左边和右边一共有 \(k\) 件衣服. 若 \(k\) 是 \(2\) 的倍数,那么我们只能向左走(左边和右边的衣服一样多).反 ...