C语言-整数类型
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语言-整数类型的更多相关文章
- 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 ...
- 对C语言整数类型的一点理解
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...
- C语言基础学习基本数据类型-其他整数类型
其他整数类型 初学C语言时,int类型会满足你对整数的大多数需求. C语言还提供了三个关键字用以修饰基本的整数类型:short.long和unsigned.有以下几个注意点: (1)C语言没有具体规定 ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- C语言三种整数类型
1,int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求. C 语言还提供了四个可以修饰 int 的关键字:short.long.signed,以及 unsigned. 利用这四个关键字 ...
- C语言常见类型占用字节数
前言 最近笔试经常遇到c语言各类型变量所占字节数的问题,这里做一个总结好了. 类型 常见的有char.int.long.short.float.double及指针等. 字符类型 这里单只char,ch ...
- c语言的类型、运算符与表达式
title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...
- python3 整数类型PyLongObject 和PyObject源码分析
python3 整数类型PyLongObject 和PyObject源码分析 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 下载地址 VS版本:vs2 ...
- C对64位整数类型的支持
在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...
随机推荐
- SRSniffer抓包工具的使用
1.打开SRSniffer软件 2.按照1-->2-->3依次点击 3.点击左侧的启动监听按钮 4.打开要记录api的软件,查看效果
- Flask - 请求扩展,钩子函数(Django的中间件) --> 请求前,中,后,
例子1. 处理请求之前 @app.before_request 在请求之前,这个被装饰的函数会被执行 用户登录验证代码可以在这里写 @app.before_request def process_re ...
- LeetCode刷题--26.删除排序数组中的重复项(简单)
题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成. 示例 ...
- 浅谈脱壳中的附加数据问题(overlay)
Author:Lenus -------------------------------------------------- 1.前言 最近,在论坛上看到很多人在弄附加数据overlay的问题,加上 ...
- Scrapy 常用的shell执行命令
1.在任意系统下,可以使用 pip 安装 Scrapy pip install scrapy/ 确认安装成功 >>> import scrapy >>> scrap ...
- Spring之byte[]传输
事出原因 某些原因,需要在在服务之间传输文件,想到只有通过Byte数组,或者是Stream传递,遂定下两方法,一个byte,一个inpustream,老样子,upload(@RequestParam( ...
- 【ABP】从零开始学习ABP_001_新建实体功能
上一篇文章中介绍了如何下载.运行ABP Zero示例项目,这个示例项目可以直接作为模板进行二次开发,很适合做企业开发框架. 本未介绍基于ABP Zero示例项目,如何新建一个自定义的实体. 此处已Eq ...
- JavaScript图片
<ul> <li> <a href="images/666.jpg" title="frist img">frist< ...
- java#keytool#生成私钥证书库、公钥证书库
原文,向作者致敬
- vue 移动端屏幕适配
https://github.com/evrone/postcss-px-to-viewport/blob/master/README_CN.md基本配置 // eslint-disable-next ...