对于char a = 0x123456;这种情况,C/C++语法是怎样规定的?

My_Love 2012-07-25 09:06:56
a == 0x56? or 未知?
...全文
260 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
My_Love 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

就是溢出,但结果必然0x56这跟大小端没关系
[/Quote]
有法定依据没?
赵4老师 2012-07-25
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

不要写连自己也预测不了结果的代码!
Corner 2012-07-25
  • 打赏
  • 举报
回复
常量值截断~留下0x56,相当于类型转换。
int a = 0x123456;
char b = (char)a;
nice_cxf 2012-07-25
  • 打赏
  • 举报
回复
就是溢出,但结果必然0x56这跟大小端没关系
图灵狗 2012-07-25
  • 打赏
  • 举报
回复
未知,CPU有大小端的差异,根据不同的字节存储顺序会有不同。
nice_cxf 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

显然没有依据。

引用 5 楼 的回复:

引用 2 楼 的回复:

就是溢出,但结果必然0x56这跟大小端没关系

有法定依据没?
[/Quote]
这个还用找什么依据?有大端的系统自己测试以下不就知道了?
数据溢出截断而已,和cpu编译器有什么关系?如果是short必然0x3456
图灵狗 2012-07-25
  • 打赏
  • 举报
回复
显然没有依据。

[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:

就是溢出,但结果必然0x56这跟大小端没关系

有法定依据没?
[/Quote]
C-Free 4.1: C-Free是一款支持多种编译器的专业化C/C++集成开发环境(IDE)。利用本软件,使用者可以轻松地编辑、编译、连接、运行、调试C/C++程序。C-Free中集成了C/C++代码解析器,能够实时解析代码,并且在编写的过程中给出智能的提示。C-Free提供了对目前业界主流C/C++编译器的支持,你可以在C-Free中轻松切换编译器。可定制的快捷键、外部工具以及外部帮助文档,使你在编写代码时得心应手。完善的工程/工程组管理使你能够方便的管理自己的代码。 主要包含如下特性: 支持多编译器,可以配置添加其他编译器; 目前支持的编译器类型: (1) MinGW 2.95/3.x/4.x/5.0 (2) Cygwin (3) Borland C++ Compiler (4) Microsoft C++ Compiler (5) Open Watcom C/C++ (6) Digital Mars C/C++ (7) Ch Interpreter 增强的C/C++语法加亮器,(可加亮函数名,类型名,常量名等); 增强的智能输入功能; 可添加语言加亮器,支持其他编程语言; 可添加工程类型,可定制其他的工程向导; 完善的代码定位功能(查找声明、实现和引用); 代码完成功能和函数参数提示功能; 能够列出代码文件中包含的所有符号(函数、类/结构、变量等); 大量可定制的功能: 可定制快捷键 可定制外部工具 可定制帮助(可支持Windows帮助、Html帮助和在线帮助); 彩色、带语法加亮打印功能; 在调试时显示控制台窗口; 工程转化功能,可将其他类型的工程转化为C-Free格式的工程,并在C-Free中打开。 注册代码: #include #include #include char *strrev(char *s, char *t); /* 倒序输出*/ int main(int argc, char *argv[]) { unsigned long Machinecode, x, y; char RegistryCode[20], MiddleCode[20]; int i; /*Machinecode = 3505625557; */ printf("Please input your Machinecode:"); scanf("%u", &Machinecode); Machinecode ^= 0x90909090; x = Machinecode / 0x25; y = Machinecode % 0x25; y += (y<0x11)?0x11:0; i = 1; while (Machinecode) { unsigned long code; code = Machinecode % y; Machinecode = Machinecode / y; code += (code<=0xA)?0x30:0x157; // printf("%d:x is %X, y is %c \n", i, Machinecode, code); MiddleCode[i-1] = code; i++; } MiddleCode[i-1] = '\0'; printf("Your RegistryCode is %s \n", strrev(RegistryCode, MiddleCode)); return 0; } char *strrev(char *s, char *t) { char *r = s; t += strlen(t); while (*s++ = *--t) { ; } return r; }

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧