关于内存单元、字节、字符等

  正在学习这些概念,现在可能理解有误。

  1.bit:也称为位,即为一个二进制位(0或是1),8 bit=1 byte。这是计算机最小的存储单位。

  2.字节:byte,计算机的存储单位,1字节(1B)=1内存单元。所以一个内存单位有8 bit,即8个二进制位。

  以上这两点应该是没疑问的。

  3.字:word,自然的存储单位(这个让我很纠结)。8位机,1字=8bit;16位机,1字=16bit;32位机,1字=32位;.......类推。

  所以如今这能这样理解,1个英文字母=1个内存单位=1字节=8bit。

  例如:

    char str[10];

    str这个字符串数组中,有10个内存单元,即能放9个"abcd"这类的字符。为什么只能放9个呢?

  因为字符串在内存单元中都是以“\0”结尾的,“\0”要占一个内存单元。

  所以,str[10]在内存中开辟了10个内存单元,加上“\0”,就只能放下9个字符了。

  举例:

    下面是内存单元格,

        str[10]=|   |   |   |   |   |   |   |   |   |   | ;

  那么,str[10]="abcde";——>| a | b | c | d | e | \0 |   |   |   |   | ;

  如果是str[10]="abcdefghi";——>| a | b | c | d | e | f | g | h | i | \0 | ;

  即是说:“\0”总会在字符串的后一位。

时间: 2024-12-28 11:52:40

关于内存单元、字节、字符等的相关文章

内存单元的寻址方式04

第六章dw是定义字型数据,define word的缩写---assume cs:codecode segmentstart: dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h mov bx,0 mov ax,0 mov cx,8 s:add ax,cs:[bx] add bx,2 loop s mov ax,4c00h int 21hcode endsend start----------0123h,0456h,0789h,0abch....这

怎么理解内存的字节编址

内存也就是常说的内存条,也就是DRAM芯片如下图: 计算机的内存是按字节来进行编址的这句话理解为: 内存是按字节编址,每个地址的存储单元可以存放8bit的数据.我们也知道CPU通过内存地址获取一条指令和数据,而他们存在存储单元中.现在就有一个问题.我们的数据和指令不可能刚好是8bit,如果小于8位,没什么问题,顶多是浪费几位(或许按字节编址是为了节省内存空间考虑).但是当数据或指令的长度大于8bit呢?因为这种情况是很容易出现的,比如一个16bit的Int数据在内存是如何存储的呢? 其实一个简单

java多线程下如何调用一个共同的内存单元(调用同一个对象)

1 /* 2 * 关于线程下共享相同的内存单元(包括代码与数据) 3 * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作. 4 * 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时. 5 * 目标对象就会自动调用接口中的run()方法 6 * */ 7 8 /* ----------------举例子------------------- */ 9 10 /* 11 * 使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶

IO-04字节-字符转换流

掌握OutputStreamWriter和InputStreamReader的作用. 在整个IO包中,实际上就是分为字节流和字符流,但除了这两个流之外,还存在一组字节-字符流转换类. OutputStreamWriter:是Writer的子类,将输出的字符流编程字节流,既:将一个字符流的输出对象变成字节流输出对象. InputStreamReader:是Reader的子类,将输入的字节流变成字符流.既:将一个字节流的输入对象变成字符流的输入对象. 字符流转换成字节流的代码: package li

数据库插入四字节字符报错Incorrect string value: ‘\xF0\xA3\x8E\

数据库插入四字节字符报错Incorrect string value: '\xF0\xA3\x8E\xB4\xE9\xAB.. 改变字符编码utf8mb4貌似很二 直接找到四字节那个字符改成正常的字符貌似有点简单粗暴(俺就是这么干的!O(∩_∩)O哈哈~). 大家怎么看?

Android——检测TXT文件中是否含有双字节字符

在读取双字节字符时,主要涉及到编码的选取: Java代码   public static boolean isRightfulTXT(File f) { // TODO Auto-generated method stub String regexp="[^\\x00-\\xff]";//双字节字符 Pattern p=Pattern.compile(regexp); try { FileInputStream fis=new FileInputStream(f); //"G

c++内存中字节对齐问题详解[转载]

一.什么是字节对齐,为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.     对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在

内存单元按字节编址,地址0000A000H~0000BFFFH共有几个存储单元

一般可以这样:按十六进制(bffff-a000)+1=1fff+12000H=2x16x16x16=81928192/1024=8 最后是8k或者按二进制bfff-a000=0001 1111 1111 1111 这样不是很好算,加1为0010 0000 0000 0000 这样就是2的13次方

Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)

马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo