C语言-整数类型

整数类型





Reg为寄存器

字长,是说这个寄存器是多少宽的,每个寄存器可以表示32bit数据,也是说CPU与RAM每一次传递的数据也是32bit

计算机内部一切都是二进制

所有的类型,只是说我们以什么方式去看待它,并不是表明,它在内部是怎么 表达的。

整数的内部表达

18 -> 00010010

-18 -> ?

我们在做十进制运算时,我们实际上总是把负号先抛掉,把它当做一个整数做运算,在运算的结果上再解决负号问题。

例如:12+(-18)-> 12-18 -> -6

12 * -18 -> -(12 * 18)



第一种方法需要在计算时需要添加符号来控制符号,不利于计算机内部的设计

第二种方法在使用时需要与中间数进行运算来判断当前数的具体数值

两种方法都使得计算机的输入输出变得复杂。

实际计算机中使用的是补码来表示负数

补码思想:

256是28就是256((1)00000000),28-1就是-1的补码

补码的意义就是拿补码和原码可以加出一个溢出的“零”

这样可以直接做普通的二进制运算,不需要进行+-符号的变换

整数的范围



高位为0,表示1-127

高位为1,表示-1 - -128

#include <stdio.h>

int main()
{
char c = 255;
int i = 255;
printf("c=%d,i=%d\n",c,i);
// 对于char c 来说为11111111最高位为1是负数
//对于int(32bit) i来说为00000000 00000000 00000000 11111111
return 0;
}

int的范围

-232-1 ~ 232-1-1

char 表达的是-128 ~ 127(中间有0)

所有整数类型范围,在是2n-1 ~ 2n-1-1

如果想将11111111当做一个纯二进制的来看需要unsigned来表达



unsigned的意思是这个整数不以补码的形式表示,没有负数,使得正数的表达范围被扩大。

00000000-11111111 unsigned表示0-255,原来是-128~127

整数越界



第二个01111111是127,加1 后本来是128,但128作为一个整数char来说,它所表达的是-128

将数的范围想象成一个圆



对一个unsigned char来说,127+1就等于128,如果是255,+1才变成0

所以对于unsigned char来说,另一个圆



使用数的范围可以找出int的最大数来,这也是翁凯老师留的一个小测验。

主要思想还是不断累加(while循环),当最后累加的数小于0时,用这个数再减1就等到int能表示的最大值

整数的格式化



所有小于int的,char、short、int都采用相同的输出就是用%d;所有比int大的,需要用%ld

#include <stdio.h>
int main()
{
char c = -1;
int i = -1;
printf("c=%u,i=%u\n",c,i);
return 0;
}

上面结果一样都是4294967295(-1表示全1),这个数是unsigned int所能表达的最大的数,char正常-1只有一个字节,只有最低位为1,当我们把小于int的变量传给printf时,编译器会把变量转换为int传进去,因为是有符号的,会被扩展为所有位都是1,最后作为unsigned结果就是现在这个结果。

八进制和十六进制

  • 一个以0开始的数字字面量是8进制
  • 一个以0x开始的数字字面量是16进制
#include <stdio.h>
int main()
{
char c = 012;
int i = 0x12;
printf("c=%d,i=%d\n",c,i);
//%o是8进制,%x是16进制
return 0;
}
//输出结果为c=10,i=18

%d是想让它以十进制的方式输出。

八进制,1x8+2x1=10;十六进制,1x16+2x1=18

进制只是我们怎么去看它,并不代表在计算机内部它会表示成八进制或十六进制,

计算机内部永远只有二进制,你在程序中写个八进制,编译器会替你转成对应的十进制形式去变成二进制交给计算机

小总结:





0001 (1) 00010(2)前四个bit表达为1,后四个为2,12就可以表达前面的二进制数,16进制的两位正好表达一个char(1个字节)

选择整数类型





CPU每次从内存中读一次数据,每一次向其中写一次数据,就是一个int,如果你让它做一个char,实际上它做的就是把32 bit的数据全部读进来,然后从当中拿出那8 bit给你。

C语言-整数类型的更多相关文章

  1. C语言整数类型在X86和X64下的字节大小

    C声明 32位机器(X86) 64位机器(X64) char 1 1 short int 2 2 int 4 4 long int 4 8 long long int 8 8 char * 4 8 f ...

  2. 对C语言整数类型的一点理解

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...

  3. C语言基础学习基本数据类型-其他整数类型

    其他整数类型 初学C语言时,int类型会满足你对整数的大多数需求. C语言还提供了三个关键字用以修饰基本的整数类型:short.long和unsigned.有以下几个注意点: (1)C语言没有具体规定 ...

  4. 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)

    最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...

  5. C语言三种整数类型

    1,int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求. C 语言还提供了四个可以修饰 int 的关键字:short.long.signed,以及 unsigned. 利用这四个关键字 ...

  6. C语言常见类型占用字节数

    前言 最近笔试经常遇到c语言各类型变量所占字节数的问题,这里做一个总结好了. 类型 常见的有char.int.long.short.float.double及指针等. 字符类型 这里单只char,ch ...

  7. c语言的类型、运算符与表达式

    title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...

  8. python3 整数类型PyLongObject 和PyObject源码分析

    python3 整数类型PyLongObject 和PyObject源码分析 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 下载地址 VS版本:vs2 ...

  9. C对64位整数类型的支持

    在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...

随机推荐

  1. java也可以做出很漂亮的界面

    其实java想把界面做漂亮点的话,只要把背景做好就行了,在jdk1.6以后可以继承JFrame,或JWindow后如下设置即可 setUndecorated(true);//不要标题栏的修饰,主要防止 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:表单控件大小

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. springcloud gateway 项目打包部署运行

    新建一个springboot项目然后做了一个小demo跳转到baidu pom <?xml version="1.0" encoding="UTF-8"? ...

  4. JS 自动返回每个月的天数

    );//M代表月份,可以自己手动设置或者选择 date.setDate() var num = date.getDate(); console.log(num) //输出每个月的天数 var time ...

  5. 解题报告:SP1043 GSS1

    题目链接:SP1043 GSS1 - Can you answer these queries I 对,\(GSS\)毒瘤数据结构题,就是我在这篇文章中提到的紫题. 相对其他\(GSS\)题简单些,但 ...

  6. jenkins构建python项目时,提示python不是内部或外部命令的解决办法

    1.回到 Jenkins 首页,点击 “构建执行状态”或“Build Executor Status” ,右则会列出本机信息. 完美解决!!!

  7. 嵊州普及Day3T4

      利内罗女士准备来到意大利进行修行.意大利由 n 个城市和 m 条道路构成,道路是双向的.到达第 i 个城市时,她可以取得该城市的全部信仰,并获得 ai 点能力提升,但因为在一个城市可以取得的信仰有 ...

  8. Jquery实现列表增删改

    //需求:对列表的增删改  //代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  9. MongoDB安装+基础操作

    MongoDB 一. 安装 这里展示使用docker安装mongoDB 拉取最新MongoDB镜像 docker pull mongo 运行容器 docker run -itd --name mong ...

  10. Codestorm:Counting Triangles 查各种三角形的个数

    题目链接:https://www.hackerrank.com/contests/codestorm/challenges/ilia 这周六玩了一天的Codestorm,这个题目是真的很好玩,无奈只做 ...