C语言的左位移能不能超过8位?

简介: C语言的左位移能不能超过8位?比如b=a
C语言的左位移能不能超过8位?比如b=a<<20; 这样可以不?如果可以,一个字节只有8个位,左移20位是不是连右边其它字节的12个位(20-8)也一起左移?

字符变量左移八次后,所有的位都移出去了,继续左移当然可以,但没有意义,因为左移八次后八个位都是0,再移没有意义
追答:
他左边的字节不受影响
追问:
int变量a(32个二进制位)左移25位的话,它是32个二进制位一起左移还是每8个二进制位单独左移25位?
 
比如a<<=25  它是以全部32个位为整体一起左移25位吗?也就是32位移出去25位?
 
还是这32位分成四个字节,然后以字节为单位,每个字节分别左移25位?
追答:
移位是针对所有二进制位的,不是一个字节。a<<=25 每移动一次,32个位都跟着一起向左移一位。
追问:
你说的char变量左移8位后就全都移出去了,再移就没有意义了因为八个位都是0
 
但我试过了好像不是这样
 
比如char ch=1; printf("%d",ch<<8);结果却输出256
 
printf("%d",ch<<25);结果就输出33554432
 
按道理char变量ch左移7位应该就是-128,再移下去就全变成0了,但实际结果却是移七位的时候还没有变成-128,而是128,再移下去不但没有变成0,反而输出结果更大。。 不知道为什么会这样
追答:
其实你问的是另一个问题了
 
你以%d格式输出就不是原来的类型了
追问:
已经定义了char ch,就相当于定义给他分配一个字节,至于%d和%c只是把存在内存中的那串二进制以不同形式输出而已,
 
一个char ch最大数就是01111111
 
按道理左移八位就全部都移出去了,但实际结果不是这样
追答:
你写成ch<<8或ch<<25,输出的是表达式的值,而不是变量的值,在<<后面加上=看看,结果是不同的,这时输出的是变量的值
追问:
哦,明白了,ch<<25并不是赋值给ch
 
谢谢你了
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
目录
相关文章
|
C语言
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
166 0
|
存储 算法 C语言
C语言数组结合位运算实战-位移与查表
C语言数组结合位运算实战-位移与查表
194 0
|
C语言
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
C语言自增减、逻辑运算、位运算、位移运算及三目运算操作
211 0
|
机器学习/深度学习 C语言
C语言 位移 速度 时间 Demo
/************************************************************************* * C语言(s = v*t + a*t*t/2)Demo * 声明: * 闲来无聊,写个物理公式(s = v*t + a*t*t/2)程序。
1223 0
|
2月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
908 0
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
301 15
|
10月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
525 23
|
9月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
309 1
一文彻底搞清楚C语言的函数
|
10月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
436 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
10月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
201 24